hippo-memory 2.0.0 → 2.1.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/dist/agent-memories/apply.d.ts +7 -5
- package/dist/agent-memories/apply.js +66 -39
- package/dist/agent-memories/claude-code.d.ts +8 -2
- package/dist/agent-memories/claude-code.js +26 -7
- package/dist/agent-memories/copilot.js +2 -1
- package/dist/agent-memories/files.js +2 -1
- package/dist/agent-memories/legacy.d.ts +6 -3
- package/dist/agent-memories/legacy.js +35 -14
- package/dist/agent-memories/markdown.d.ts +3 -1
- package/dist/agent-memories/markdown.js +3 -1
- package/dist/agent-memories/openclaw.js +5 -2
- package/dist/agent-memories/plan.js +11 -1
- package/dist/agent-memories/project-folds.js +2 -1
- package/dist/agent-memories/report.d.ts +4 -1
- package/dist/agent-memories/report.js +43 -9
- package/dist/agent-memories/source.d.ts +8 -2
- package/dist/agent-memories/source.js +11 -3
- package/dist/agent-memories/sync.d.ts +7 -2
- package/dist/agent-memories/sync.js +141 -101
- package/dist/api/assemble.d.ts +6 -4
- package/dist/api/assemble.js +11 -6
- package/dist/api/{audit.d.ts → auth/audit.d.ts} +18 -16
- package/dist/api/{audit.js → auth/audit.js} +11 -11
- package/dist/api/{auth.d.ts → auth/auth.d.ts} +19 -15
- package/dist/api/{auth.js → auth/auth.js} +46 -29
- package/dist/api/{quarantine.d.ts → auth/quarantine.d.ts} +8 -7
- package/dist/api/{quarantine.js → auth/quarantine.js} +8 -8
- package/dist/api/auth/session-owners.d.ts +10 -0
- package/dist/api/auth/session-owners.js +35 -0
- package/dist/api/availability.d.ts +3 -1
- package/dist/api/availability.js +3 -1
- package/dist/api/busy.d.ts +2 -0
- package/dist/api/busy.js +2 -0
- package/dist/api/cli-surface.d.ts +6 -0
- package/dist/api/cli-surface.js +6 -0
- package/dist/api/config-of.d.ts +5 -0
- package/dist/api/config-of.js +6 -0
- package/dist/api/context-auto.d.ts +4 -1
- package/dist/api/context-auto.js +10 -2
- package/dist/api/context-render.js +14 -7
- package/dist/api/context-select.d.ts +4 -1
- package/dist/api/context-select.js +23 -14
- package/dist/api/context-types.d.ts +38 -12
- package/dist/api/context.d.ts +8 -5
- package/dist/api/context.js +112 -57
- package/dist/api/continuity.d.ts +24 -21
- package/dist/api/continuity.js +18 -20
- package/dist/api/correction-latency.d.ts +3 -1
- package/dist/api/correction-latency.js +3 -1
- package/dist/api/error-reply.d.ts +4 -1
- package/dist/api/error-reply.js +12 -3
- package/dist/api/index.d.ts +39 -23
- package/dist/api/index.js +21 -23
- package/dist/api/instruction-detect.d.ts +4 -1
- package/dist/api/instruction-detect.js +75 -20
- package/dist/api/ledger-db.d.ts +15 -11
- package/dist/api/ledger-db.js +21 -23
- package/dist/api/memories/conflicts.d.ts +33 -0
- package/dist/api/memories/conflicts.js +67 -0
- package/dist/api/{forget.d.ts → memories/forget.d.ts} +11 -9
- package/dist/api/{forget.js → memories/forget.js} +22 -15
- package/dist/api/memories/memories.d.ts +27 -0
- package/dist/api/{memories.js → memories/memories.js} +16 -21
- package/dist/api/memories/outcome.d.ts +22 -0
- package/dist/api/{outcome.js → memories/outcome.js} +14 -8
- package/dist/api/memories/promote.d.ts +40 -0
- package/dist/api/{promote.js → memories/promote.js} +35 -22
- package/dist/api/memories/refine.d.ts +10 -0
- package/dist/api/memories/refine.js +12 -0
- package/dist/api/{remember-local.d.ts → memories/remember-local.d.ts} +16 -11
- package/dist/api/{remember-local.js → memories/remember-local.js} +34 -20
- package/dist/api/{remember.d.ts → memories/remember.d.ts} +19 -13
- package/dist/api/{remember.js → memories/remember.js} +42 -26
- package/dist/api/objects/cards.d.ts +39 -0
- package/dist/api/{cards.js → objects/cards.js} +12 -14
- package/dist/api/{drill-down.d.ts → objects/drill-down.d.ts} +12 -10
- package/dist/api/{drill-down.js → objects/drill-down.js} +7 -8
- package/dist/api/objects/goals.d.ts +18 -0
- package/dist/api/{goals.js → objects/goals.js} +12 -12
- package/dist/api/objects/graph.d.ts +11 -0
- package/dist/api/objects/graph.js +16 -0
- package/dist/api/objects/objects.d.ts +9 -0
- package/dist/api/{objects.js → objects/objects.js} +2 -4
- package/dist/api/objects/predictions.d.ts +11 -0
- package/dist/api/{predictions.js → objects/predictions.js} +7 -6
- package/dist/api/{projects.d.ts → objects/projects.d.ts} +8 -5
- package/dist/api/{projects.js → objects/projects.js} +8 -4
- package/dist/api/pilot-arm.d.ts +8 -4
- package/dist/api/pilot-arm.js +5 -4
- package/dist/api/prompt-hook.d.ts +32 -19
- package/dist/api/prompt-hook.js +65 -44
- package/dist/api/provenance-coverage.d.ts +3 -1
- package/dist/api/provenance-coverage.js +3 -1
- package/dist/api/recall/finish.d.ts +185 -0
- package/dist/api/recall/finish.js +301 -0
- package/dist/api/{recall-pipeline.d.ts → recall/pipeline.d.ts} +12 -8
- package/dist/api/{recall-pipeline.js → recall/pipeline.js} +176 -92
- package/dist/api/recall/recall.d.ts +6 -0
- package/dist/api/{recall.js → recall/recall.js} +101 -60
- package/dist/api/recall/render.d.ts +39 -0
- package/dist/api/recall/render.js +60 -0
- package/dist/api/{recall-request.d.ts → recall/request.d.ts} +7 -5
- package/dist/api/recall/request.js +261 -0
- package/dist/api/{recall-cli.d.ts → recall/rows.d.ts} +18 -12
- package/dist/api/{recall-cli.js → recall/rows.js} +28 -27
- package/dist/api/{recall-types.d.ts → recall/types.d.ts} +95 -70
- package/dist/api/{recall-types.js → recall/types.js} +1 -1
- package/dist/api/session-end.d.ts +16 -12
- package/dist/api/session-end.js +46 -30
- package/dist/api/{auto-sleep.d.ts → sleep/auto-sleep.d.ts} +9 -5
- package/dist/api/{auto-sleep.js → sleep/auto-sleep.js} +7 -12
- package/dist/api/sleep/dormant.d.ts +25 -0
- package/dist/api/sleep/dormant.js +64 -0
- package/dist/api/{learn.d.ts → sleep/learn.d.ts} +5 -4
- package/dist/api/sleep/learn.js +138 -0
- package/dist/api/sleep/sleep-run.d.ts +38 -0
- package/dist/api/{sleep-run.js → sleep/sleep-run.js} +51 -43
- package/dist/api/{sleep.d.ts → sleep/sleep.d.ts} +17 -11
- package/dist/api/sleep/sleep.js +9 -0
- package/dist/api/status.d.ts +3 -1
- package/dist/api/status.js +3 -1
- package/dist/api/store-init.d.ts +4 -1
- package/dist/api/store-init.js +4 -1
- package/dist/api/tokens.d.ts +10 -9
- package/dist/api/tokens.js +9 -10
- package/dist/api/types.d.ts +28 -7
- package/dist/api/types.js +13 -4
- package/dist/capture/caller-session.d.ts +8 -2
- package/dist/capture/caller-session.js +16 -6
- package/dist/capture/capture-error.d.ts +3 -1
- package/dist/capture/capture-error.js +3 -1
- package/dist/capture/codex-patch.js +7 -2
- package/dist/capture/command.d.ts +4 -2
- package/dist/capture/command.js +33 -14
- package/dist/capture/compact-resume-caller.js +15 -8
- package/dist/capture/compact.d.ts +8 -5
- package/dist/capture/compact.js +34 -23
- package/dist/capture/compaction-items-caller.js +9 -3
- package/dist/capture/compaction-record.d.ts +4 -3
- package/dist/capture/compaction-record.js +20 -12
- package/dist/capture/compaction-spool.d.ts +15 -4
- package/dist/capture/compaction-spool.js +64 -17
- package/dist/capture/copilot-transcript.d.ts +11 -3
- package/dist/capture/copilot-transcript.js +16 -6
- package/dist/capture/extract.js +20 -8
- package/dist/capture/failure-caller.js +23 -12
- package/dist/capture/failure-reading.d.ts +10 -3
- package/dist/capture/failure-reading.js +24 -7
- package/dist/capture/pre-compact-caller.js +11 -4
- package/dist/capture/session-digest.d.ts +15 -4
- package/dist/capture/session-digest.js +39 -13
- package/dist/capture/session-end-caller.d.ts +4 -1
- package/dist/capture/session-end-caller.js +20 -8
- package/dist/capture/session-texts.d.ts +6 -2
- package/dist/capture/session-texts.js +22 -7
- package/dist/capture/session-worker.d.ts +4 -2
- package/dist/capture/session-worker.js +45 -17
- package/dist/capture/transcript.d.ts +13 -4
- package/dist/capture/transcript.js +32 -10
- package/dist/capture/working-state.d.ts +13 -4
- package/dist/capture/working-state.js +50 -56
- package/dist/cli/api-context.d.ts +14 -2
- package/dist/cli/api-context.js +45 -2
- package/dist/cli/audit.js +23 -23
- package/dist/cli/auth.js +19 -27
- package/dist/cli/briefs.d.ts +1 -1
- package/dist/cli/briefs.js +20 -15
- package/dist/cli/card.d.ts +1 -1
- package/dist/cli/card.js +56 -73
- package/dist/cli/client.d.ts +12 -4
- package/dist/cli/client.js +43 -13
- package/dist/cli/compact-resume-payload.d.ts +4 -1
- package/dist/cli/compact-resume-payload.js +12 -5
- package/dist/cli/context.js +42 -17
- package/dist/cli/continuity.d.ts +5 -5
- package/dist/cli/continuity.js +90 -107
- package/dist/cli/curate.d.ts +4 -3
- package/dist/cli/curate.js +46 -68
- package/dist/cli/dag.d.ts +1 -1
- package/dist/cli/dag.js +14 -17
- package/dist/cli/decisions.js +27 -26
- package/dist/cli/eval.js +16 -21
- package/dist/cli/exit.d.ts +4 -1
- package/dist/cli/exit.js +10 -2
- package/dist/cli/explain.js +12 -11
- package/dist/cli/flag-values.d.ts +1 -1
- package/dist/cli/flag-values.js +9 -18
- package/dist/cli/github.d.ts +6 -0
- package/dist/cli/github.js +25 -13
- package/dist/cli/goals.d.ts +1 -1
- package/dist/cli/goals.js +39 -56
- package/dist/cli/graph.d.ts +1 -1
- package/dist/cli/graph.js +15 -11
- package/dist/cli/hook-runtime.d.ts +31 -9
- package/dist/cli/hook-runtime.js +40 -15
- package/dist/cli/incidents.d.ts +1 -1
- package/dist/cli/incidents.js +25 -25
- package/dist/cli/init.js +26 -11
- package/dist/cli/install-steps.d.ts +12 -3
- package/dist/cli/install-steps.js +42 -18
- package/dist/cli/last-sleep.d.ts +4 -1
- package/dist/cli/last-sleep.js +9 -4
- package/dist/cli/maintenance.d.ts +1 -1
- package/dist/cli/maintenance.js +11 -12
- package/dist/cli/notes.d.ts +1 -1
- package/dist/cli/notes.js +8 -5
- package/dist/cli/object-verbs.d.ts +4 -4
- package/dist/cli/object-verbs.js +10 -13
- package/dist/cli/open-browser.js +11 -2
- package/dist/cli/playbooks.d.ts +3 -3
- package/dist/cli/playbooks.js +40 -32
- package/dist/cli/predictions.js +15 -19
- package/dist/cli/print.js +4 -2
- package/dist/cli/projects.js +21 -11
- package/dist/cli/quality-repair-once.js +5 -4
- package/dist/cli/recall.js +129 -93
- package/dist/cli/refine-llm.d.ts +15 -4
- package/dist/cli/refine-llm.js +16 -7
- package/dist/cli/remember.js +46 -50
- package/dist/cli/scheduler.d.ts +4 -1
- package/dist/cli/scheduler.js +9 -5
- package/dist/cli/serve.js +22 -17
- package/dist/cli/session-hooks.d.ts +2 -2
- package/dist/cli/session-hooks.js +87 -50
- package/dist/cli/setup.js +54 -32
- package/dist/cli/shared.d.ts +3 -1
- package/dist/cli/shared.js +24 -9
- package/dist/cli/slack.js +15 -24
- package/dist/cli/sleep-render.d.ts +3 -1
- package/dist/cli/sleep-render.js +8 -5
- package/dist/cli/sleep.js +14 -6
- package/dist/cli/status.d.ts +4 -4
- package/dist/cli/status.js +32 -27
- package/dist/cli/stdin.d.ts +10 -3
- package/dist/cli/stdin.js +10 -3
- package/dist/cli/transfer.d.ts +1 -1
- package/dist/cli/transfer.js +71 -75
- package/dist/cli/verbs/memory.js +8 -6
- package/dist/cli/verbs/objects.js +10 -4
- package/dist/cli/versioned-verbs.d.ts +8 -7
- package/dist/cli/versioned-verbs.js +31 -21
- package/dist/cli.js +13 -16
- package/dist/connectors/dlq.d.ts +6 -6
- package/dist/connectors/dlq.js +12 -8
- package/dist/connectors/github/backfill.d.ts +4 -4
- package/dist/connectors/github/backfill.js +6 -4
- package/dist/connectors/github/deletion.d.ts +6 -4
- package/dist/connectors/github/deletion.js +5 -5
- package/dist/connectors/github/dlq.d.ts +8 -6
- package/dist/connectors/github/dlq.js +11 -5
- package/dist/connectors/github/ingest.d.ts +2 -2
- package/dist/connectors/github/ingest.js +9 -6
- package/dist/connectors/github/octokit-client.d.ts +3 -1
- package/dist/connectors/github/octokit-client.js +7 -2
- package/dist/connectors/github/ratelimit.d.ts +6 -2
- package/dist/connectors/github/ratelimit.js +6 -2
- package/dist/connectors/github/signature.d.ts +14 -3
- package/dist/connectors/github/signature.js +17 -3
- package/dist/connectors/github/tenant-routing.d.ts +6 -4
- package/dist/connectors/github/tenant-routing.js +6 -6
- package/dist/connectors/github/transform.js +50 -67
- package/dist/connectors/github/types.d.ts +10 -3
- package/dist/connectors/github/types.js +6 -2
- package/dist/connectors/github/webhook.d.ts +5 -5
- package/dist/connectors/github/webhook.js +34 -23
- package/dist/connectors/ingest.d.ts +5 -3
- package/dist/connectors/ingest.js +3 -4
- package/dist/connectors/slack/backfill.d.ts +5 -5
- package/dist/connectors/slack/backfill.js +3 -3
- package/dist/connectors/slack/deletion.d.ts +4 -4
- package/dist/connectors/slack/deletion.js +6 -6
- package/dist/connectors/slack/dlq.d.ts +4 -4
- package/dist/connectors/slack/dlq.js +6 -6
- package/dist/connectors/slack/ingest.d.ts +6 -4
- package/dist/connectors/slack/ingest.js +5 -5
- package/dist/connectors/slack/signature.d.ts +4 -1
- package/dist/connectors/slack/tenant-routing.d.ts +6 -4
- package/dist/connectors/slack/tenant-routing.js +6 -6
- package/dist/connectors/slack/transform.d.ts +6 -2
- package/dist/connectors/slack/transform.js +6 -2
- package/dist/connectors/slack/types.d.ts +3 -1
- package/dist/connectors/slack/web-client.js +8 -3
- package/dist/connectors/slack/webhook.d.ts +5 -5
- package/dist/connectors/slack/webhook.js +19 -11
- package/dist/connectors/slack/workspaces.d.ts +7 -3
- package/dist/connectors/slack/workspaces.js +7 -3
- package/dist/connectors/store.d.ts +8 -0
- package/dist/connectors/store.js +2 -0
- package/dist/consolidate/conflicts.js +23 -9
- package/dist/consolidate/dag-summary.js +2 -1
- package/dist/consolidate/dag.d.ts +10 -5
- package/dist/consolidate/dag.js +37 -36
- package/dist/consolidate/decay.js +19 -6
- package/dist/consolidate/dedupe.d.ts +14 -5
- package/dist/consolidate/dedupe.js +27 -16
- package/dist/consolidate/flush-units.d.ts +4 -1
- package/dist/consolidate/flush-units.js +4 -1
- package/dist/consolidate/half-life-migration.d.ts +18 -8
- package/dist/consolidate/half-life-migration.js +48 -18
- package/dist/consolidate/llm-passes.js +27 -11
- package/dist/consolidate/memory-value-weights.d.ts +6 -2
- package/dist/consolidate/memory-value-weights.js +6 -2
- package/dist/consolidate/memory-value.d.ts +30 -10
- package/dist/consolidate/memory-value.js +36 -13
- package/dist/consolidate/merge.d.ts +4 -1
- package/dist/consolidate/merge.js +42 -32
- package/dist/consolidate/overlap-index.d.ts +8 -2
- package/dist/consolidate/overlap-index.js +11 -4
- package/dist/consolidate/physics-pass.d.ts +3 -1
- package/dist/consolidate/physics-pass.js +10 -7
- package/dist/consolidate/replay.d.ts +11 -4
- package/dist/consolidate/replay.js +19 -7
- package/dist/consolidate/run.d.ts +13 -5
- package/dist/consolidate/run.js +4 -4
- package/dist/consolidate/sleep.d.ts +14 -6
- package/dist/consolidate/sleep.js +41 -38
- package/dist/consolidate/trace.d.ts +7 -2
- package/dist/consolidate/trace.js +7 -2
- package/dist/consolidate/traces.js +26 -29
- package/dist/core/ablation.d.ts +9 -3
- package/dist/core/ablation.js +14 -4
- package/dist/core/active-scope.d.ts +3 -1
- package/dist/core/active-scope.js +3 -1
- package/dist/core/agent-memory-tools.d.ts +2 -0
- package/dist/core/agent-memory-tools.js +2 -0
- package/dist/core/ambient.d.ts +4 -3
- package/dist/core/ambient.js +8 -6
- package/dist/core/api-errors.d.ts +9 -3
- package/dist/core/api-errors.js +9 -3
- package/dist/core/capture-contract.d.ts +4 -1
- package/dist/core/capture-contract.js +27 -8
- package/dist/core/compare.d.ts +24 -8
- package/dist/core/compare.js +24 -8
- package/dist/core/config.d.ts +18 -9
- package/dist/core/config.js +24 -14
- package/dist/core/cosine.d.ts +4 -1
- package/dist/core/cosine.js +4 -1
- package/dist/core/handoff.d.ts +7 -2
- package/dist/core/handoff.js +4 -1
- package/dist/core/markdown.js +21 -16
- package/dist/core/memory-audit.js +14 -3
- package/dist/core/memory-quality.d.ts +12 -3
- package/dist/core/memory-quality.js +57 -21
- package/dist/core/memory.d.ts +84 -27
- package/dist/core/memory.js +73 -29
- package/dist/core/merged-row.d.ts +8 -2
- package/dist/core/merged-row.js +10 -3
- package/dist/core/package-root.d.ts +3 -1
- package/dist/core/package-root.js +3 -1
- package/dist/core/particle-refresh.d.ts +8 -0
- package/dist/core/particle-refresh.js +22 -0
- package/dist/core/physics-config.d.ts +4 -1
- package/dist/core/physics-config.js +6 -2
- package/dist/core/physics.d.ts +37 -11
- package/dist/core/physics.js +55 -20
- package/dist/core/project-identity.d.ts +34 -17
- package/dist/core/project-identity.js +33 -17
- package/dist/core/project-remote.d.ts +8 -4
- package/dist/core/project-remote.js +31 -14
- package/dist/core/recall-scope.d.ts +33 -11
- package/dist/core/recall-scope.js +42 -15
- package/dist/core/rejection-digest.d.ts +7 -0
- package/dist/core/rejection-digest.js +13 -0
- package/dist/core/salience.d.ts +3 -1
- package/dist/core/salience.js +10 -4
- package/dist/core/search-types.d.ts +15 -2
- package/dist/core/search-types.js +11 -0
- package/dist/dashboard/dashboard-actions.js +13 -2
- package/dist/dashboard/dashboard-snapshot.d.ts +2 -2
- package/dist/dashboard/dashboard-snapshot.js +4 -4
- package/dist/dashboard/dashboard.js +6 -3
- package/dist/db/backup.js +2 -2
- package/dist/db/busy.d.ts +10 -3
- package/dist/db/busy.js +27 -5
- package/dist/db/connect.d.ts +10 -3
- package/dist/db/connect.js +8 -3
- package/dist/db/continuity.d.ts +1 -1
- package/dist/db/continuity.js +27 -11
- package/dist/db/meta.d.ts +4 -1
- package/dist/db/meta.js +4 -1
- package/dist/db/migrate.d.ts +10 -5
- package/dist/db/migrate.js +26 -13
- 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 -1
- package/dist/db/migrations/v12.js +2 -1
- package/dist/db/migrations/v14.js +2 -1
- package/dist/db/migrations/v15.js +4 -2
- package/dist/db/migrations/v16.js +6 -3
- package/dist/db/migrations/v17.js +2 -1
- package/dist/db/migrations/v19.js +4 -2
- package/dist/db/migrations/v20.js +2 -1
- package/dist/db/migrations/v22.js +12 -6
- package/dist/db/migrations/v23.js +6 -3
- package/dist/db/migrations/v24.js +6 -3
- package/dist/db/migrations/v25.js +4 -2
- package/dist/db/migrations/v26.js +4 -2
- package/dist/db/migrations/v27.js +6 -3
- package/dist/db/migrations/v28.js +4 -2
- package/dist/db/migrations/v29.js +4 -2
- package/dist/db/migrations/v30.js +6 -3
- package/dist/db/migrations/v31.js +4 -2
- package/dist/db/migrations/v32.js +6 -3
- package/dist/db/migrations/v33.js +4 -2
- package/dist/db/migrations/v34.js +2 -1
- package/dist/db/migrations/v35.js +2 -1
- package/dist/db/migrations/v36.js +2 -1
- package/dist/db/migrations/v37.js +10 -5
- package/dist/db/migrations/v38.js +10 -5
- package/dist/db/migrations/v39.js +14 -6
- package/dist/db/migrations/v40.js +4 -2
- package/dist/db/migrations/v41.js +4 -2
- package/dist/db/migrations/v42.js +2 -1
- package/dist/db/migrations/v44.js +4 -2
- package/dist/db/migrations/v45.js +4 -2
- package/dist/db/migrations/v49.js +2 -1
- package/dist/db/migrations/v50.js +4 -2
- package/dist/db/migrations/v51.js +4 -2
- package/dist/db/migrations/v52.js +2 -1
- package/dist/db/migrations/v53.js +8 -4
- package/dist/db/migrations/v54.js +2 -1
- package/dist/db/migrations/v55.js +4 -2
- package/dist/db/migrations/v56.d.ts +3 -0
- package/dist/db/migrations/v56.js +28 -0
- package/dist/db/open.d.ts +24 -12
- package/dist/db/open.js +25 -13
- package/dist/db/physics-state.d.ts +8 -4
- package/dist/db/physics-state.js +13 -20
- package/dist/db/raw-archive-mirror-cleanup.d.ts +4 -2
- package/dist/db/raw-archive-mirror-cleanup.js +6 -4
- package/dist/db/request-stores.d.ts +19 -5
- package/dist/db/request-stores.js +14 -5
- package/dist/db/tables.d.ts +2 -1
- package/dist/db/tables.js +12 -4
- package/dist/db/vector-store.d.ts +13 -4
- package/dist/db/vector-store.js +34 -14
- package/dist/db/wal-checkpointer.d.ts +2 -1
- package/dist/db/wal-checkpointer.js +19 -7
- package/dist/doctor.d.ts +4 -1
- package/dist/doctor.js +121 -39
- package/dist/embeddings/local.d.ts +8 -4
- package/dist/embeddings/local.js +9 -5
- package/dist/embeddings/provider.d.ts +19 -10
- package/dist/embeddings/provider.js +31 -17
- package/dist/embeddings/transformers.d.ts +16 -4
- package/dist/embeddings/transformers.js +32 -15
- package/dist/entry/json-hooks.d.ts +1 -1
- package/dist/entry/json-hooks.js +1 -1
- package/dist/entry/project-identity.js +2 -1
- package/dist/entry/session-text.d.ts +1 -1
- package/dist/entry/session-text.js +1 -1
- package/dist/entry/sqlite-handles.d.ts +10 -0
- package/dist/entry/sqlite-handles.js +9 -0
- package/dist/entry/store-kit.d.ts +19 -6
- package/dist/entry/store-kit.js +6 -4
- package/dist/eval/eval-stats.d.ts +27 -8
- package/dist/eval/eval-stats.js +17 -5
- package/dist/eval/eval-suite.d.ts +3 -1
- package/dist/eval/eval-suite.js +409 -187
- package/dist/eval/eval.d.ts +8 -2
- package/dist/eval/eval.js +8 -2
- package/dist/eval/judgment.js +16 -6
- package/dist/graph/delta.d.ts +9 -42
- package/dist/graph/delta.js +17 -11
- package/dist/graph/extract.d.ts +10 -7
- package/dist/graph/extract.js +57 -25
- package/dist/graph/recall.d.ts +12 -4
- package/dist/graph/recall.js +30 -13
- package/dist/graph/stream.d.ts +18 -6
- package/dist/graph/stream.js +32 -10
- package/dist/graph/view.d.ts +19 -6
- package/dist/graph/view.js +42 -17
- package/dist/hooks/codex-session.js +2 -2
- package/dist/hooks/codex-wrapper.d.ts +3 -1
- package/dist/hooks/codex-wrapper.js +9 -4
- package/dist/hooks/copilot.d.ts +19 -5
- package/dist/hooks/copilot.js +54 -15
- package/dist/hooks/hook-blocks.d.ts +4 -1
- package/dist/hooks/hook-blocks.js +8 -3
- package/dist/hooks/json-hooks.d.ts +9 -5
- package/dist/hooks/json-hooks.js +69 -34
- package/dist/hooks/opencode.js +15 -5
- package/dist/hooks/shared.d.ts +27 -8
- package/dist/hooks/shared.js +57 -16
- package/dist/importers/core.d.ts +12 -4
- package/dist/importers/core.js +8 -7
- package/dist/importers/markdown-parse.d.ts +15 -5
- package/dist/importers/markdown-parse.js +16 -7
- package/dist/importers/markdown.js +6 -9
- package/dist/importers/sources.js +10 -23
- package/dist/importers/vault.d.ts +2 -2
- package/dist/importers/vault.js +43 -27
- package/dist/index.d.ts +32 -6
- package/dist/index.js +25 -7
- package/dist/learn/autolearn.d.ts +17 -6
- package/dist/learn/autolearn.js +53 -24
- package/dist/learn/churn-git.d.ts +4 -1
- package/dist/learn/churn-git.js +29 -5
- package/dist/learn/extract.d.ts +4 -1
- package/dist/learn/extract.js +16 -9
- package/dist/learn/forward-claim-detector.d.ts +17 -5
- package/dist/learn/forward-claim-detector.js +34 -15
- package/dist/learn/invalidation.d.ts +12 -7
- package/dist/learn/invalidation.js +56 -27
- package/dist/learn/roots.d.ts +3 -0
- package/dist/learn/roots.js +5 -0
- package/dist/mcp/admin-tools.d.ts +5 -5
- package/dist/mcp/admin-tools.js +28 -23
- package/dist/mcp/format.d.ts +1 -1
- package/dist/mcp/format.js +4 -2
- package/dist/mcp/framing.d.ts +3 -1
- package/dist/mcp/framing.js +20 -8
- package/dist/mcp/memory-tools.d.ts +3 -3
- package/dist/mcp/memory-tools.js +18 -14
- package/dist/mcp/protocol.d.ts +32 -16
- package/dist/mcp/protocol.js +12 -9
- package/dist/mcp/recall-tools.d.ts +3 -3
- package/dist/mcp/recall-tools.js +62 -74
- package/dist/mcp/request.d.ts +7 -5
- package/dist/mcp/request.js +57 -74
- package/dist/mcp/server.d.ts +3 -1
- package/dist/mcp/server.js +8 -3
- package/dist/mcp/session-state.d.ts +1 -1
- package/dist/mcp/session-state.js +4 -3
- package/dist/mcp/shared-gate.d.ts +3 -2
- package/dist/mcp/shared-gate.js +3 -2
- package/dist/mcp/stdio.d.ts +6 -3
- package/dist/mcp/stdio.js +52 -21
- package/dist/mcp/tool-args.d.ts +4 -1
- package/dist/mcp/tool-args.js +8 -3
- package/dist/mcp/tools.js +76 -32
- package/dist/objects/customer-notes.d.ts +12 -10
- package/dist/objects/customer-notes.js +21 -15
- package/dist/objects/decisions.d.ts +18 -10
- package/dist/objects/decisions.js +23 -17
- package/dist/objects/descriptor.js +2 -1
- package/dist/objects/fields.d.ts +4 -1
- package/dist/objects/fields.js +6 -2
- package/dist/objects/incidents.d.ts +14 -16
- package/dist/objects/incidents.js +29 -30
- package/dist/objects/lifecycle.d.ts +0 -4
- package/dist/objects/lifecycle.js +21 -24
- package/dist/objects/policies.d.ts +12 -16
- package/dist/objects/policies.js +17 -21
- package/dist/objects/processes.d.ts +16 -10
- package/dist/objects/processes.js +20 -15
- package/dist/objects/project-briefs.d.ts +13 -14
- package/dist/objects/project-briefs.js +33 -39
- package/dist/objects/skills.d.ts +10 -12
- package/dist/objects/skills.js +17 -22
- package/dist/postinstall.js +15 -7
- package/dist/predictions/planning-fallacy.d.ts +19 -6
- package/dist/predictions/planning-fallacy.js +4 -2
- package/dist/rerankers/clef.d.ts +8 -2
- package/dist/rerankers/clef.js +14 -9
- package/dist/rerankers/cross-encoder.d.ts +2 -1
- package/dist/rerankers/cross-encoder.js +9 -6
- package/dist/rerankers/index.js +2 -1
- package/dist/rerankers/jev.js +2 -1
- package/dist/rerankers/llm.d.ts +6 -2
- package/dist/rerankers/llm.js +8 -3
- package/dist/rerankers/remote.d.ts +3 -1
- package/dist/rerankers/remote.js +5 -2
- package/dist/rerankers/types.d.ts +6 -2
- package/dist/search/bm25-search.d.ts +3 -1
- package/dist/search/bm25-search.js +15 -2
- package/dist/search/boosts.js +4 -3
- package/dist/search/embed-memories.d.ts +10 -5
- package/dist/search/embed-memories.js +62 -36
- package/dist/search/engine.d.ts +4 -1
- package/dist/search/engine.js +6 -2
- package/dist/search/goal-boost.d.ts +10 -3
- package/dist/search/goal-boost.js +13 -6
- package/dist/search/hybrid-score.d.ts +4 -1
- package/dist/search/hybrid-score.js +4 -1
- package/dist/search/hybrid.d.ts +23 -8
- package/dist/search/hybrid.js +12 -7
- package/dist/search/multihop.js +14 -13
- package/dist/search/path-context.d.ts +10 -3
- package/dist/search/path-context.js +10 -3
- package/dist/search/physics-search.d.ts +9 -4
- package/dist/search/physics-search.js +38 -14
- package/dist/search/rerank.d.ts +2 -1
- package/dist/search/rerank.js +2 -1
- package/dist/search/rrf.d.ts +14 -5
- package/dist/search/rrf.js +11 -4
- package/dist/search/vector.d.ts +8 -2
- package/dist/search/vector.js +9 -3
- package/dist/server/auth.d.ts +18 -14
- package/dist/server/auth.js +69 -38
- package/dist/server/boot.d.ts +3 -1
- package/dist/server/boot.js +95 -56
- package/dist/server/client-ip.d.ts +11 -4
- package/dist/server/client-ip.js +27 -10
- package/dist/server/cursor.d.ts +10 -3
- package/dist/server/cursor.js +10 -3
- package/dist/server/deadline.d.ts +5 -2
- package/dist/server/deadline.js +10 -3
- package/dist/server/key-check-bounds.js +12 -4
- package/dist/server/lifecycle.d.ts +4 -1
- package/dist/server/lifecycle.js +10 -4
- package/dist/server/mcp-http.d.ts +2 -1
- package/dist/server/mcp-http.js +37 -22
- package/dist/server/rate-limit.d.ts +17 -5
- package/dist/server/rate-limit.js +55 -26
- package/dist/server/ready.js +7 -4
- package/dist/server/request.d.ts +15 -4
- package/dist/server/request.js +42 -15
- package/dist/server/route-checks.d.ts +4 -1
- package/dist/server/route-checks.js +8 -3
- package/dist/server/route-table.d.ts +8 -6
- package/dist/server/route-table.js +547 -93
- package/dist/server/routes/admin.d.ts +7 -7
- package/dist/server/routes/admin.js +36 -15
- package/dist/server/routes/customer-notes.d.ts +5 -5
- package/dist/server/routes/customer-notes.js +5 -4
- package/dist/server/routes/decisions.d.ts +5 -5
- package/dist/server/routes/decisions.js +12 -6
- package/dist/server/routes/incidents.d.ts +5 -5
- package/dist/server/routes/incidents.js +10 -4
- package/dist/server/routes/memories.d.ts +8 -8
- package/dist/server/routes/memories.js +12 -19
- package/dist/server/routes/object-routes.d.ts +8 -5
- package/dist/server/routes/object-routes.js +4 -2
- package/dist/server/routes/policies.d.ts +6 -6
- package/dist/server/routes/policies.js +11 -4
- package/dist/server/routes/predictions.d.ts +5 -5
- package/dist/server/routes/predictions.js +9 -4
- package/dist/server/routes/processes.d.ts +5 -5
- package/dist/server/routes/processes.js +15 -6
- package/dist/server/routes/project-briefs.d.ts +6 -6
- package/dist/server/routes/project-briefs.js +3 -2
- package/dist/server/routes/recall.d.ts +3 -3
- package/dist/server/routes/recall.js +21 -10
- package/dist/server/routes/skills.d.ts +6 -6
- package/dist/server/routes/skills.js +12 -4
- package/dist/server/server-detect.d.ts +24 -8
- package/dist/server/server-detect.js +57 -22
- package/dist/server/sleep-child.js +16 -10
- package/dist/server/sleep-offload.d.ts +8 -5
- package/dist/server/sleep-offload.js +41 -19
- package/dist/server/tls.d.ts +4 -1
- package/dist/server/tls.js +13 -5
- package/dist/server/types.d.ts +38 -26
- package/dist/server/validation.d.ts +4 -1
- package/dist/server/validation.js +22 -9
- package/dist/server.d.ts +15 -10
- package/dist/server.js +32 -12
- package/dist/sharing/global-store.d.ts +5 -10
- package/dist/sharing/global-store.js +8 -43
- package/dist/sharing/global-sync.d.ts +3 -1
- package/dist/sharing/global-sync.js +16 -6
- package/dist/sharing/project-merge.d.ts +25 -7
- package/dist/sharing/project-merge.js +49 -17
- package/dist/sharing/search-both.d.ts +8 -4
- package/dist/sharing/search-both.js +19 -12
- package/dist/sharing/share.d.ts +8 -4
- package/dist/sharing/share.js +39 -15
- package/dist/store/ambient.js +9 -5
- package/dist/store/audit-event.d.ts +2 -2
- package/dist/store/audit-event.js +8 -3
- package/dist/store/audit.d.ts +6 -3
- package/dist/store/audit.js +16 -6
- package/dist/store/auth.d.ts +4 -2
- package/dist/store/auth.js +63 -20
- package/dist/store/busy.d.ts +9 -0
- package/dist/store/busy.js +16 -0
- package/dist/store/candidates.d.ts +12 -5
- package/dist/store/candidates.js +75 -36
- package/dist/store/capture-write.d.ts +2 -1
- package/dist/store/capture-write.js +2 -1
- package/dist/store/card-detail.d.ts +4 -4
- package/dist/store/card-detail.js +15 -8
- package/dist/store/cards.d.ts +24 -10
- package/dist/store/cards.js +93 -60
- package/dist/store/compaction-caller.d.ts +2 -1
- package/dist/store/compaction-caller.js +2 -1
- package/dist/store/compactions-record.d.ts +14 -8
- package/dist/store/compactions-record.js +95 -32
- package/dist/store/compactions.js +35 -15
- package/dist/store/conflicts.d.ts +9 -4
- package/dist/store/conflicts.js +100 -45
- package/dist/store/connectors/dlq.d.ts +17 -5
- package/dist/store/connectors/dlq.js +56 -5
- package/dist/store/connectors/event-log.d.ts +111 -2
- package/dist/store/connectors/event-log.js +2 -1
- package/dist/store/connectors/github.d.ts +6 -3
- package/dist/store/connectors/github.js +24 -40
- package/dist/store/connectors/slack.d.ts +2 -1
- package/dist/store/connectors/slack.js +25 -37
- package/dist/store/dashboard-reads.d.ts +7 -3
- package/dist/store/dashboard-reads.js +32 -11
- package/dist/store/delete-and-batch.d.ts +17 -11
- package/dist/store/delete-and-batch.js +67 -26
- package/dist/store/delivery-recorder.d.ts +8 -5
- package/dist/store/delivery-recorder.js +70 -32
- package/dist/store/descendant-page.d.ts +2 -1
- package/dist/store/descendant-page.js +24 -9
- package/dist/store/diagnostics.d.ts +2 -1
- package/dist/store/diagnostics.js +2 -1
- package/dist/store/doctor-reads.d.ts +2 -1
- package/dist/store/doctor-reads.js +13 -5
- package/dist/store/dormant.d.ts +19 -11
- package/dist/store/dormant.js +40 -18
- package/dist/store/embeddings/index.d.ts +13 -9
- package/dist/store/embeddings/index.js +19 -12
- package/dist/store/entry-reads.d.ts +49 -20
- package/dist/store/entry-reads.js +181 -66
- package/dist/store/entry-row.d.ts +10 -6
- package/dist/store/entry-row.js +17 -12
- package/dist/store/entry-writes.d.ts +22 -10
- package/dist/store/entry-writes.js +41 -14
- package/dist/store/failure-log-at.js +1 -1
- package/dist/store/failure-log.d.ts +4 -2
- package/dist/store/failure-log.js +13 -6
- package/dist/store/gated-write.d.ts +3 -3
- package/dist/store/gated-write.js +3 -3
- package/dist/store/goals.d.ts +5 -4
- package/dist/store/goals.js +8 -10
- package/dist/store/graph-apply.d.ts +21 -0
- package/dist/{graph/write.js → store/graph-apply.js} +31 -11
- package/dist/store/graph-queue.d.ts +9 -6
- package/dist/store/graph-queue.js +15 -10
- package/dist/store/graph-reads.d.ts +16 -11
- package/dist/store/graph-reads.js +24 -15
- package/dist/store/graph-rows.d.ts +41 -3
- package/dist/store/graph-rows.js +10 -7
- package/dist/store/graph-view-rows.js +14 -7
- package/dist/store/graph-writes.d.ts +16 -10
- package/dist/store/graph-writes.js +59 -36
- package/dist/store/handoffs.d.ts +4 -4
- package/dist/store/handoffs.js +40 -19
- package/dist/store/index-and-stats.d.ts +2 -2
- package/dist/store/index-and-stats.js +6 -5
- package/dist/store/index.d.ts +3 -1
- package/dist/store/index.js +1 -0
- package/dist/store/key-audit.d.ts +2 -1
- package/dist/store/key-audit.js +2 -1
- package/dist/store/key-writes.d.ts +2 -1
- package/dist/store/key-writes.js +9 -2
- package/dist/store/ledger-turn.d.ts +4 -1
- package/dist/store/ledger-turn.js +7 -2
- package/dist/store/mirrors.d.ts +11 -4
- package/dist/store/mirrors.js +88 -16
- package/dist/store/narrow.d.ts +6 -0
- package/dist/store/narrow.js +11 -0
- package/dist/store/open.d.ts +4 -2
- package/dist/store/open.js +18 -9
- package/dist/store/pilot-arm.d.ts +2 -1
- package/dist/store/pilot-arm.js +18 -6
- package/dist/store/planning-fallacy-evidence.d.ts +2 -2
- package/dist/store/planning-fallacy-evidence.js +8 -5
- package/dist/store/port/agent-import.d.ts +62 -0
- package/dist/store/port/agent-import.js +2 -0
- package/dist/store/port/consolidation.d.ts +129 -0
- package/dist/store/port/consolidation.js +2 -0
- package/dist/store/port/learning.d.ts +19 -0
- package/dist/store/port/learning.js +2 -0
- package/dist/store/port/local-files.d.ts +18 -0
- package/dist/store/port/local-files.js +2 -0
- package/dist/store/port/promotion.d.ts +20 -0
- package/dist/store/port/promotion.js +3 -0
- package/dist/store/port-groups.d.ts +160 -0
- package/dist/store/port-groups.js +2 -0
- package/dist/store/port.d.ts +215 -229
- package/dist/store/port.js +3 -9
- package/dist/store/predictions.d.ts +14 -10
- package/dist/store/predictions.js +37 -17
- package/dist/store/project-tags.d.ts +4 -1
- package/dist/store/project-tags.js +16 -5
- package/dist/store/quality-repair.d.ts +8 -4
- package/dist/store/quality-repair.js +53 -20
- package/dist/store/quarantine.d.ts +1 -0
- package/dist/store/quarantine.js +23 -9
- package/dist/store/raw-archive.d.ts +5 -4
- package/dist/store/raw-archive.js +11 -10
- package/dist/store/recall-trace.d.ts +22 -17
- package/dist/store/recall-trace.js +126 -63
- package/dist/store/rejected-values.d.ts +15 -10
- package/dist/store/rejected-values.js +33 -12
- package/dist/store/rejection.d.ts +12 -11
- package/dist/store/rejection.js +18 -19
- package/dist/store/report-reads.d.ts +2 -1
- package/dist/store/report-reads.js +2 -1
- package/dist/store/rows.d.ts +7 -5
- package/dist/store/rows.js +18 -11
- package/dist/store/rule-sql.d.ts +6 -4
- package/dist/store/rule-sql.js +16 -9
- package/dist/store/search-rows.d.ts +14 -9
- package/dist/store/search-rows.js +48 -23
- package/dist/store/sessions.d.ts +12 -10
- package/dist/store/sessions.js +40 -21
- package/dist/store/set-aside.d.ts +2 -2
- package/dist/store/set-aside.js +18 -5
- package/dist/store/sqlite/agent-import.d.ts +3 -0
- package/dist/store/sqlite/agent-import.js +77 -0
- package/dist/store/sqlite/cards-group.d.ts +6 -0
- package/dist/store/sqlite/cards-group.js +37 -0
- package/dist/store/sqlite/conflicts-group.d.ts +6 -0
- package/dist/store/sqlite/conflicts-group.js +18 -0
- package/dist/store/sqlite/connector-events-group.d.ts +2 -1
- package/dist/store/sqlite/connector-events-group.js +17 -6
- package/dist/store/sqlite/connector-writes-group.d.ts +2 -1
- package/dist/store/sqlite/connector-writes-group.js +9 -4
- package/dist/store/sqlite/consolidation-group.d.ts +4 -0
- package/dist/store/sqlite/consolidation-group.js +64 -0
- package/dist/store/sqlite/dag-reads-group.js +1 -1
- package/dist/store/sqlite/dormant-group.d.ts +6 -0
- package/dist/store/sqlite/dormant-group.js +29 -0
- package/dist/store/sqlite/entry-writes-group.d.ts +6 -3
- package/dist/store/sqlite/entry-writes-group.js +37 -14
- package/dist/store/sqlite/error-codec.d.ts +4 -2
- package/dist/store/sqlite/error-codec.js +32 -10
- package/dist/store/sqlite/executor-counts.js +2 -1
- package/dist/store/sqlite/executor.d.ts +8 -3
- package/dist/store/sqlite/executor.js +56 -18
- package/dist/store/sqlite/global-promote.d.ts +5 -0
- package/dist/store/sqlite/global-promote.js +48 -0
- package/dist/store/sqlite/goals-group.d.ts +6 -0
- package/dist/store/sqlite/goals-group.js +23 -0
- package/dist/store/sqlite/graph-reads-group.d.ts +2 -1
- package/dist/store/sqlite/graph-reads-group.js +2 -1
- package/dist/store/sqlite/held-connection.d.ts +7 -1
- package/dist/store/sqlite/held-connection.js +34 -7
- package/dist/store/sqlite/last-recall-group.d.ts +4 -2
- package/dist/store/sqlite/last-recall-group.js +9 -4
- package/dist/store/sqlite/learning-group.d.ts +4 -0
- package/dist/store/sqlite/learning-group.js +17 -0
- package/dist/store/sqlite/maintenance-groups.js +2 -1
- package/dist/store/sqlite/object-rows.d.ts +6 -3
- package/dist/store/sqlite/object-rows.js +34 -5
- package/dist/store/sqlite/objects-group.d.ts +5 -4
- package/dist/store/sqlite/objects-group.js +84 -33
- package/dist/store/sqlite/predictions-group.d.ts +2 -1
- package/dist/store/sqlite/predictions-group.js +4 -2
- package/dist/store/sqlite/promotion-group.d.ts +3 -0
- package/dist/store/sqlite/promotion-group.js +10 -0
- package/dist/store/sqlite/quarantine-group.d.ts +2 -1
- package/dist/store/sqlite/quarantine-group.js +4 -2
- package/dist/store/sqlite/reports-group.d.ts +6 -0
- package/dist/store/sqlite/reports-group.js +33 -0
- package/dist/store/sqlite/request-scope.d.ts +6 -0
- package/dist/store/sqlite/request-scope.js +18 -0
- package/dist/store/sqlite/sessions-group.d.ts +6 -0
- package/dist/store/sqlite/sessions-group.js +46 -0
- package/dist/store/sqlite/store.d.ts +22 -11
- package/dist/store/sqlite/store.js +84 -11
- package/dist/store/sqlite/vector-pack.js +2 -1
- package/dist/store/sqlite/vector-reads-group.js +2 -1
- package/dist/store/sqlite/worker-jobs.d.ts +2 -1
- package/dist/store/sqlite/worker-jobs.js +19 -7
- package/dist/store/sqlite/worker-ops.d.ts +10 -5
- package/dist/store/sqlite/worker-ops.js +6 -3
- package/dist/store/sqlite/worker-store.d.ts +4 -3
- package/dist/store/sqlite/worker-store.js +24 -14
- package/dist/store/summaries.d.ts +19 -12
- package/dist/store/summaries.js +36 -21
- package/dist/store/summary-dirty.d.ts +2 -1
- package/dist/store/summary-dirty.js +2 -1
- package/dist/store/tenant.d.ts +3 -2
- package/dist/store/tenant.js +5 -4
- package/dist/store/token-ledger-rows.js +6 -3
- package/dist/store/token-ledger.d.ts +19 -13
- package/dist/store/token-ledger.js +27 -14
- package/dist/store/tombstone-checks.d.ts +4 -1
- package/dist/store/tombstone-checks.js +10 -1
- package/dist/store/usage-reports.js +2 -1
- package/dist/store/vector-index.d.ts +8 -5
- package/dist/store/vector-index.js +24 -10
- package/dist/store/working-memory.d.ts +6 -4
- package/dist/store/working-memory.js +14 -9
- package/dist/support-bundle.js +10 -5
- package/dist/trust/quarantine.d.ts +1 -2
- package/dist/trust/quarantine.js +1 -5
- package/dist/trust/reject-flow.d.ts +12 -3
- package/dist/trust/reject-flow.js +12 -4
- package/dist/util/anthropic-messages.d.ts +4 -1
- package/dist/util/anthropic-messages.js +14 -5
- package/dist/util/atomic-write.d.ts +4 -2
- package/dist/util/atomic-write.js +25 -14
- package/dist/util/compaction-items.d.ts +4 -1
- package/dist/util/compaction-items.js +8 -2
- package/dist/util/crash-handlers.d.ts +7 -2
- package/dist/util/crash-handlers.js +13 -4
- package/dist/util/env.d.ts +16 -4
- package/dist/util/env.js +78 -25
- package/dist/util/home-path.js +12 -6
- package/dist/util/hook-payload.d.ts +3 -1
- package/dist/util/hook-payload.js +3 -1
- package/dist/util/http-retry.d.ts +12 -6
- package/dist/util/http-retry.js +16 -6
- package/dist/util/http-util.d.ts +20 -5
- package/dist/util/http-util.js +28 -9
- package/dist/util/json.d.ts +4 -1
- package/dist/util/json.js +4 -1
- package/dist/util/keyset.js +2 -1
- package/dist/util/limits.js +4 -2
- package/dist/util/log.d.ts +13 -5
- package/dist/util/log.js +29 -6
- package/dist/util/net.d.ts +5 -0
- package/dist/util/net.js +19 -0
- package/dist/util/real-path.d.ts +2 -1
- package/dist/util/real-path.js +4 -3
- package/dist/util/request-scope.d.ts +11 -3
- package/dist/util/request-scope.js +13 -4
- package/dist/util/same-text.d.ts +10 -3
- package/dist/util/same-text.js +10 -3
- package/dist/util/secret-detect.d.ts +24 -7
- package/dist/util/secret-detect.js +49 -14
- package/dist/util/spawn-argv.d.ts +3 -1
- package/dist/util/spawn-argv.js +13 -4
- package/dist/util/sqlite-blocked.d.ts +15 -4
- package/dist/util/sqlite-blocked.js +19 -6
- package/dist/util/stored-json.d.ts +4 -1
- package/dist/util/stored-json.js +6 -2
- package/dist/util/stream-tee.d.ts +2 -1
- package/dist/util/stream-tee.js +8 -5
- package/dist/util/transcript-tail.d.ts +4 -1
- package/dist/util/transcript-tail.js +4 -1
- package/dist/util/version.d.ts +8 -3
- package/dist/util/version.js +8 -3
- package/dist/util/write-budget.d.ts +7 -2
- package/dist/util/write-budget.js +5 -2
- package/dist/util/yaml.d.ts +4 -1
- package/dist/util/yaml.js +4 -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 -1
- package/scripts/postinstall.cjs +3 -1
- package/dist/api/cards.d.ts +0 -42
- package/dist/api/conflicts.d.ts +0 -28
- package/dist/api/conflicts.js +0 -61
- package/dist/api/dormant.d.ts +0 -14
- package/dist/api/dormant.js +0 -58
- package/dist/api/goals.d.ts +0 -18
- package/dist/api/graph.d.ts +0 -8
- package/dist/api/graph.js +0 -8
- package/dist/api/learn.js +0 -125
- package/dist/api/memories.d.ts +0 -25
- package/dist/api/objects.d.ts +0 -9
- package/dist/api/outcome.d.ts +0 -19
- package/dist/api/predictions.d.ts +0 -11
- package/dist/api/promote.d.ts +0 -36
- package/dist/api/recall-core.d.ts +0 -4
- package/dist/api/recall-core.js +0 -125
- package/dist/api/recall-finish.d.ts +0 -53
- package/dist/api/recall-finish.js +0 -30
- package/dist/api/recall-history.d.ts +0 -64
- package/dist/api/recall-history.js +0 -159
- package/dist/api/recall-record.d.ts +0 -43
- package/dist/api/recall-record.js +0 -78
- package/dist/api/recall-request.js +0 -121
- package/dist/api/recall.d.ts +0 -6
- package/dist/api/refine.d.ts +0 -7
- package/dist/api/refine.js +0 -10
- package/dist/api/session-owners.d.ts +0 -4
- package/dist/api/session-owners.js +0 -17
- package/dist/api/sleep-run.d.ts +0 -26
- package/dist/api/sleep.js +0 -11
- package/dist/graph/write.d.ts +0 -14
- package/dist/store/sqlite/busy.d.ts +0 -3
- package/dist/store/sqlite/busy.js +0 -8
- package/dist/store/sqlite/local.d.ts +0 -4
- package/dist/store/sqlite/local.js +0 -8
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
// getContext's selection stages: the pinned-only branch, the strongest-first branch and the search branch.
|
|
2
2
|
import { recallScopeFilter } from '../store/search-rows.js';
|
|
3
|
-
import { heldIdLookup } from '../store/entry-reads.js';
|
|
4
3
|
import { calculateStrength } from '../core/memory.js';
|
|
5
4
|
import { auditQueryFields, recordAuditEvent } from '../store/audit.js';
|
|
6
5
|
import { isWorthSurfacing } from '../core/memory-quality.js';
|
|
@@ -12,6 +11,7 @@ import { compareScoredResults } from '../core/compare.js';
|
|
|
12
11
|
import { scopeMatch } from '../core/active-scope.js';
|
|
13
12
|
import { scopeBoostFor } from '../search/boosts.js';
|
|
14
13
|
import { promptTokens, contentTokens, gatePromptRecall, } from '../core/prompt-recall.js';
|
|
14
|
+
import { heldIds } from './recall/finish.js';
|
|
15
15
|
const GLOBAL_DISCOUNT = 1 / DEFAULT_LOCAL_BUMP;
|
|
16
16
|
// Share and promote copy a memory to the global store under a new id, so equal content is the only link.
|
|
17
17
|
// A pinned copy wins, then the stronger one after the ranking's own global discount; a tie keeps the local copy.
|
|
@@ -34,7 +34,10 @@ export function oneCopyPerMemory(local, global, now) {
|
|
|
34
34
|
return [local.filter((e) => kept.has(e)), global.filter((e) => kept.has(e))];
|
|
35
35
|
}
|
|
36
36
|
export const finiteOr = (v, dflt, min) => Number.isFinite(v) && v >= min ? v : dflt;
|
|
37
|
-
/**
|
|
37
|
+
/**
|
|
38
|
+
* Pins plus the prompt-recall or recent-N backfill; null means the hook block is turned off, so task state stays out
|
|
39
|
+
* too.
|
|
40
|
+
*/
|
|
38
41
|
export function selectPinned(opts, plan, left, pools, admission) {
|
|
39
42
|
const { obs, primaryIsGlobal, config: pinnedCfg } = plan;
|
|
40
43
|
if (!pinnedCfg.pinnedInject.enabled) {
|
|
@@ -50,7 +53,8 @@ export function selectPinned(opts, plan, left, pools, admission) {
|
|
|
50
53
|
const [localPool, globalPool] = oneCopyPerMemory(localEntries, globalEntries, nowP);
|
|
51
54
|
obs?.dropMissing([...localEntries, ...globalEntries], [...localPool, ...globalPool], 'load', 'duplicate');
|
|
52
55
|
const picked = { items: [], ids: new Set(), used: 0 };
|
|
53
|
-
// Pinned entries are explicit intent, the recent-N list an automatic backfill; both share ONE budget and the recent
|
|
56
|
+
// Pinned entries are explicit intent, the recent-N list an automatic backfill; both share ONE budget and the recent
|
|
57
|
+
// loop runs first,
|
|
54
58
|
// so pins are ranked here and reserve their share before it can spend.
|
|
55
59
|
const pinnedLocal = localPool.filter((e) => e.pinned);
|
|
56
60
|
const pinnedGlobal = globalPool.filter((e) => e.pinned);
|
|
@@ -76,7 +80,9 @@ function rankPinned(plan, pinnedLocal, pinnedGlobal, nowP) {
|
|
|
76
80
|
const scopeBoost = scopeBoostFor(scopeMatch(entry.tags, plan.activeScope));
|
|
77
81
|
return {
|
|
78
82
|
entry,
|
|
79
|
-
score: calculateStrength(entry, nowP, { ablation: strengthAblation() }) *
|
|
83
|
+
score: calculateStrength(entry, nowP, { ablation: strengthAblation() }) *
|
|
84
|
+
(isGlobal ? GLOBAL_DISCOUNT : 1) *
|
|
85
|
+
scopeBoost,
|
|
80
86
|
tokens: plan.price(entry, isGlobal),
|
|
81
87
|
isGlobal,
|
|
82
88
|
};
|
|
@@ -84,7 +90,8 @@ function rankPinned(plan, pinnedLocal, pinnedGlobal, nowP) {
|
|
|
84
90
|
.sort(compareScoredResults);
|
|
85
91
|
}
|
|
86
92
|
// Mirrors the pin loop's continue-not-break so a big pin cannot block smaller ones from reserving, and dedupes by id
|
|
87
|
-
// because a synced pin sits in both stores. A pin also in the recent slice is counted twice: recents under-fill,
|
|
93
|
+
// because a synced pin sits in both stores. A pin also in the recent slice is counted twice: recents under-fill,
|
|
94
|
+
// safely.
|
|
88
95
|
function reservePinned(rankedPinned, effBudget) {
|
|
89
96
|
let pinnedReserve = 0;
|
|
90
97
|
const reservedIds = new Set();
|
|
@@ -248,11 +255,12 @@ export async function selectBySearch(ctx, plan, left, pools, admission) {
|
|
|
248
255
|
async function searchBothStores(ctx, plan, options) {
|
|
249
256
|
const { left, minResults, pools, admit } = options;
|
|
250
257
|
const { cost, price } = plan;
|
|
251
|
-
// A local pool row is local by construction; sync keeps a global row's id on its local copy, so the global pool is
|
|
258
|
+
// A local pool row is local by construction; sync keeps a global row's id on its local copy, so the global pool is
|
|
259
|
+
// looked up.
|
|
252
260
|
const poolIds = (pool) => [...pool.entries, ...(pool.recall ?? [])].map((e) => e.id);
|
|
253
261
|
const localIds = new Set(poolIds(pools.local));
|
|
254
|
-
const alsoLocal =
|
|
255
|
-
const isGlobalHit = (e) => !localIds.has(e.id) && !alsoLocal(e.id);
|
|
262
|
+
const alsoLocal = await heldIds(plan.local.store, poolIds(pools.global).filter((id) => !localIds.has(id)), ctx.tenantId);
|
|
263
|
+
const isGlobalHit = (e) => !localIds.has(e.id) && !alsoLocal.has(e.id);
|
|
256
264
|
const roots = { local: ctx.hippoRoot, global: plan.globalRoot };
|
|
257
265
|
const merged = await rankBothStores(plan.query, roots, { local: pools.local.entries, global: pools.global.entries }, contextVectorSpec(ctx, plan, admit), {
|
|
258
266
|
budget: left,
|
|
@@ -269,7 +277,12 @@ async function searchBothStores(ctx, plan, options) {
|
|
|
269
277
|
}
|
|
270
278
|
/** The vector arm under the lexical window's own tenant, scope and current-row rules. */
|
|
271
279
|
function contextVectorSpec(ctx, plan, admit) {
|
|
272
|
-
return {
|
|
280
|
+
return {
|
|
281
|
+
tenantId: ctx.tenantId,
|
|
282
|
+
scope: recallScopeFilter(plan.exactScope, 'exact', plan.ownScope),
|
|
283
|
+
includeSuperseded: false,
|
|
284
|
+
admit,
|
|
285
|
+
};
|
|
273
286
|
}
|
|
274
287
|
async function searchLocalRows(ctx, plan, options) {
|
|
275
288
|
const { left, minResults, localEntries, admit } = options;
|
|
@@ -300,12 +313,8 @@ async function auditContextRecall(ctx, plan, resultCount) {
|
|
|
300
313
|
op: 'recall',
|
|
301
314
|
metadata: { ...auditQueryFields(plan.query), results: resultCount, mode: 'context' },
|
|
302
315
|
};
|
|
303
|
-
if (plan.other) {
|
|
304
|
-
await plan.other.appendAuditEvents([row]);
|
|
305
|
-
return;
|
|
306
|
-
}
|
|
307
316
|
if (plan.hasLocal)
|
|
308
|
-
|
|
317
|
+
await plan.local.store.appendAuditEvents([row]);
|
|
309
318
|
if (plan.hasGlobal && !plan.primaryIsGlobal)
|
|
310
319
|
recordAuditEvent(plan.globalRoot, row);
|
|
311
320
|
}
|
|
@@ -4,8 +4,12 @@ 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
|
-
*
|
|
7
|
+
/**
|
|
8
|
+
* Options for `getContext`: a budget-bounded bundle of recalled memories, active task snapshot, handoff and recent
|
|
9
|
+
* events.
|
|
10
|
+
* Rendering opts (`format`, `framing`, `rendered`) and host-side opts (`auto`) stay in the CLI, whose print helpers are
|
|
11
|
+
* shared.
|
|
12
|
+
*/
|
|
9
13
|
export interface ContextOpts {
|
|
10
14
|
q?: string;
|
|
11
15
|
/** Default 1500 tokens. */
|
|
@@ -13,18 +17,35 @@ export interface ContextOpts {
|
|
|
13
17
|
limit?: number;
|
|
14
18
|
pinnedOnly?: boolean;
|
|
15
19
|
scope?: string;
|
|
16
|
-
/**
|
|
20
|
+
/**
|
|
21
|
+
* Envelope scope to match exactly, as in `recall`: admits that scope even when private, after the actor's scope
|
|
22
|
+
* check.
|
|
23
|
+
*/
|
|
17
24
|
exactScope?: string;
|
|
18
|
-
/**
|
|
19
|
-
*
|
|
25
|
+
/**
|
|
26
|
+
* With `pinnedOnly`, also inject the N most recent writes that pass the quality floor (`isWorthSurfacing`); pinned
|
|
27
|
+
* entries bypass it.
|
|
28
|
+
* Filtering happens BEFORE the take-N, so asking for 5 gets 5 qualifying entries. Ignored when `pinnedOnly` is false.
|
|
29
|
+
*/
|
|
20
30
|
includeRecent?: number;
|
|
21
|
-
/**
|
|
31
|
+
/**
|
|
32
|
+
* Re-include other-project memories the origin partition excludes by default; they come back tagged `category:
|
|
33
|
+
* 'cross-project'`.
|
|
34
|
+
*/
|
|
22
35
|
crossProject?: boolean;
|
|
23
|
-
/**
|
|
24
|
-
*
|
|
36
|
+
/**
|
|
37
|
+
* The active project for the origin partition ('' = not in a project): a name, or an identity whose rows may carry
|
|
38
|
+
* its legacy folder name.
|
|
39
|
+
* Defaults to `resolveProjectIdentity(process.cwd())`; surfaces whose cwd is not the caller's project (HTTP server)
|
|
40
|
+
* should pass it.
|
|
41
|
+
*/
|
|
25
42
|
currentProject?: ProjectRef;
|
|
26
|
-
/**
|
|
27
|
-
*
|
|
43
|
+
/**
|
|
44
|
+
* The calling session's id, stamped on this call's recall trace. When it strictly equals the active snapshot's
|
|
45
|
+
* `session_id` the read is unbounded;
|
|
46
|
+
* otherwise the snapshot must pass the freshness bound. Absent (undefined/null/'') never matches. Host-resolved, so
|
|
47
|
+
* this stays host-agnostic.
|
|
48
|
+
*/
|
|
28
49
|
currentSessionId?: string | null;
|
|
29
50
|
/** Raw hook-payload prompt; only the pinned-only branch reads it, gated on `pinnedInject.promptRecall`. */
|
|
30
51
|
prompt?: string;
|
|
@@ -60,7 +81,10 @@ export interface ContextResultEntry {
|
|
|
60
81
|
promptRecall?: boolean;
|
|
61
82
|
/** v39: the entry's owning project ('' = user-global, null = legacy row). */
|
|
62
83
|
origin?: string | null;
|
|
63
|
-
/**
|
|
84
|
+
/**
|
|
85
|
+
* How the origin relates to the active project; 'cross-project' appears only when `crossProject` was set (or
|
|
86
|
+
* isolation is disabled).
|
|
87
|
+
*/
|
|
64
88
|
category?: 'project' | 'user-global' | 'cross-project';
|
|
65
89
|
}
|
|
66
90
|
export interface ContextResult {
|
|
@@ -70,7 +94,9 @@ export interface ContextResult {
|
|
|
70
94
|
sessionHandoff?: SessionHandoff | null;
|
|
71
95
|
recentEvents?: SessionEvent[];
|
|
72
96
|
/** The ambient landscape summary over every live row the read may see in the local and global stores,
|
|
73
|
-
*
|
|
97
|
+
* not just the rows loaded. Present only when ambient config is on, the caller is not pinned-only, and an entry was
|
|
98
|
+
* returned.
|
|
99
|
+
*/
|
|
74
100
|
ambientState?: AmbientState;
|
|
75
101
|
}
|
|
76
102
|
//# sourceMappingURL=context-types.d.ts.map
|
package/dist/api/context.d.ts
CHANGED
|
@@ -1,13 +1,16 @@
|
|
|
1
1
|
import { type MemoryEntry } from '../core/memory.js';
|
|
2
2
|
import { type ProjectRef } from '../core/project-identity.js';
|
|
3
3
|
import type { ContextOpts, ContextResult } from './context-types.js';
|
|
4
|
-
import { type
|
|
4
|
+
import { type ContextWith } from './types.js';
|
|
5
5
|
export { oneCopyPerMemory } from './context-select.js';
|
|
6
|
-
/** The secret half of the ambient policy alone, for callers with their own scope rule: a flagged row is admitted only
|
|
6
|
+
/** The secret half of the ambient policy alone, for callers with their own scope rule: a flagged row is admitted only
|
|
7
|
+
* inside its owning project. */
|
|
7
8
|
export declare function ambientSecretAdmit(e: MemoryEntry, currentProject: ProjectRef): boolean;
|
|
8
9
|
/** Tokens a context block may use when the caller sets no budget; the hook command and the CLI default match it. */
|
|
9
10
|
export declare const DEFAULT_CONTEXT_BUDGET = 1500;
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
11
|
+
export declare const NO_QUERY = "*";
|
|
12
|
+
/** Assembles a budget-bounded, tenant-scoped context bundle; mutates `last_retrieval_ids` and emits a 'recall' audit
|
|
13
|
+
* row for non-pinned, non-'*' queries. Returns an empty result when there are no memories, snapshot, handoff or recent
|
|
14
|
+
* events. CLI rendering stays in `cli.ts`. */
|
|
15
|
+
export declare function getContext(ctx: ContextWith<'contextReads'>, opts?: ContextOpts): Promise<ContextResult>;
|
|
13
16
|
//# sourceMappingURL=context.d.ts.map
|
package/dist/api/context.js
CHANGED
|
@@ -4,27 +4,28 @@ import { freshActiveSnapshot, SNAPSHOT_AMBIENT_MAX_AGE_MS } from '../store/sessi
|
|
|
4
4
|
import { estimateTokens } from '../util/token-text.js';
|
|
5
5
|
import { markRetrieved, COMPACTION_MEMORY_TAG } from '../core/memory.js';
|
|
6
6
|
import { isWorthSurfacing } from '../core/memory-quality.js';
|
|
7
|
-
import { getGlobalRoot } from '../sharing/global-store.js';
|
|
8
7
|
import { evalNow, strengthAblation } from '../core/ablation.js';
|
|
9
8
|
import { dropHeldCopies } from '../util/same-text.js';
|
|
10
9
|
import { BadRequestError } from '../core/api-errors.js';
|
|
11
|
-
import { isSharedStore
|
|
10
|
+
import { isSharedStore } from '../core/config.js';
|
|
11
|
+
import { configOf } from './config-of.js';
|
|
12
12
|
import { rethrowIfSqliteBlocked } from '../util/sqlite-blocked.js';
|
|
13
|
-
import { errorMessage, log } from '../util/log.js';
|
|
14
|
-
import { resolveProjectIdentity, classifyOriginProject,
|
|
13
|
+
import { errorMessage, log, errorFields } from '../util/log.js';
|
|
14
|
+
import { resolveProjectIdentity, classifyOriginProject, projectId, projectNames, } from '../core/project-identity.js';
|
|
15
15
|
import { promptTokens } from '../core/prompt-recall.js';
|
|
16
16
|
import { detectSecret } from '../util/secret-detect.js';
|
|
17
17
|
import { isSessionDigestRow } from '../core/session-digest-row.js';
|
|
18
18
|
import { addAmbientTallies, ambientStateFromTallies } from '../core/ambient.js';
|
|
19
|
-
import { hasGroup
|
|
20
|
-
import { storeFor } from '../store/sqlite/store.js';
|
|
19
|
+
import { hasGroup } from '../store/index.js';
|
|
21
20
|
import { passesScopeFilterForRecall, assertScopeRequestAllowed, personalScopeOf } from '../core/recall-scope.js';
|
|
22
21
|
import { finiteOr, selectBySearch, selectPinned, selectStrongest, } from './context-select.js';
|
|
23
|
-
import { strengthenOf } from './recall
|
|
22
|
+
import { strengthenOf } from './recall/finish.js';
|
|
23
|
+
import { tokenPurse } from './recall/render.js';
|
|
24
24
|
import { ownerOrSubject } from './types.js';
|
|
25
25
|
export { oneCopyPerMemory } from './context-select.js';
|
|
26
|
-
/** The single ambient-injection admission policy, shared by getContext and the CLI ambient-state summary so they cannot
|
|
27
|
-
* Secret veto is unconditional (flagged rows inject only in their own project); private scopes need
|
|
26
|
+
/** The single ambient-injection admission policy, shared by getContext and the CLI ambient-state summary so they cannot
|
|
27
|
+
* drift. Secret veto is unconditional (flagged rows inject only in their own project); private scopes need
|
|
28
|
+
* `exactScope`, other projects `includeCrossProject`. */
|
|
28
29
|
function ambientAdmitEntry(e, currentProject, includeCrossProject, exactScope, own) {
|
|
29
30
|
if (!ambientSecretAdmit(e, currentProject))
|
|
30
31
|
return false;
|
|
@@ -34,7 +35,8 @@ function ambientAdmitEntry(e, currentProject, includeCrossProject, exactScope, o
|
|
|
34
35
|
return true;
|
|
35
36
|
return classifyOriginProject(e.origin_project, currentProject) !== 'cross-project';
|
|
36
37
|
}
|
|
37
|
-
/** The secret half of the ambient policy alone, for callers with their own scope rule: a flagged row is admitted only
|
|
38
|
+
/** The secret half of the ambient policy alone, for callers with their own scope rule: a flagged row is admitted only
|
|
39
|
+
* inside its owning project. */
|
|
38
40
|
export function ambientSecretAdmit(e, currentProject) {
|
|
39
41
|
if (!detectSecret(e).flagged)
|
|
40
42
|
return true;
|
|
@@ -45,11 +47,13 @@ export function ambientSecretAdmit(e, currentProject) {
|
|
|
45
47
|
}
|
|
46
48
|
/** Tokens a context block may use when the caller sets no budget; the hook command and the CLI default match it. */
|
|
47
49
|
export const DEFAULT_CONTEXT_BUDGET = 1500;
|
|
50
|
+
// The plan's query when the caller gave none: context then ranks by strength instead of searching.
|
|
51
|
+
export const NO_QUERY = '*';
|
|
48
52
|
/** Most rows per store a no-query context reads; past it, ranking and ambientState see the strongest by decay. */
|
|
49
53
|
const CONTEXT_CANDIDATE_CAP = 2000;
|
|
50
54
|
/** A store's base search and context reads; a store without the group throws StoreNotPortedError. */
|
|
51
55
|
function sourceOf(store) {
|
|
52
|
-
return { store, reads:
|
|
56
|
+
return { store, reads: store.contextReads };
|
|
53
57
|
}
|
|
54
58
|
// The pinned-only branch needs pins and recent-N candidates, not the corpus.
|
|
55
59
|
async function loadAmbientEntries(source, tenantId, options) {
|
|
@@ -79,30 +83,37 @@ async function loadAmbientEntries(source, tenantId, options) {
|
|
|
79
83
|
onQualityDrop?.(e);
|
|
80
84
|
return false;
|
|
81
85
|
};
|
|
82
|
-
const loaded = await source.reads.ambientCandidates(tenantId, {
|
|
83
|
-
|
|
86
|
+
const loaded = await source.reads.ambientCandidates(tenantId, {
|
|
87
|
+
recentNeeded: recent.needed,
|
|
88
|
+
admit: admitAmbient,
|
|
89
|
+
recall,
|
|
90
|
+
origins: recent.origins,
|
|
91
|
+
});
|
|
92
|
+
// Pins and recent rows reach core only through the store's own
|
|
93
|
+
// call to admit, so core applies it again with the tenant.
|
|
84
94
|
const entries = loaded.entries.filter((e) => ownTenant(e) && recheck(e));
|
|
85
95
|
return loaded.recall ? { entries, recall: loaded.recall.filter(ownTenant) } : { entries };
|
|
86
96
|
}
|
|
87
|
-
/** Assembles a budget-bounded, tenant-scoped context bundle; mutates `last_retrieval_ids` and emits a 'recall' audit
|
|
88
|
-
* Returns an empty result when there are no memories, snapshot, handoff or recent
|
|
97
|
+
/** Assembles a budget-bounded, tenant-scoped context bundle; mutates `last_retrieval_ids` and emits a 'recall' audit
|
|
98
|
+
* row for non-pinned, non-'*' queries. Returns an empty result when there are no memories, snapshot, handoff or recent
|
|
99
|
+
* events. CLI rendering stays in `cli.ts`. */
|
|
89
100
|
export async function getContext(ctx, opts = {}) {
|
|
90
101
|
const budget = opts.budget ?? DEFAULT_CONTEXT_BUDGET;
|
|
91
102
|
assertScopeRequestAllowed(ctx.actor, opts.exactScope);
|
|
92
103
|
if (budget <= 0) {
|
|
93
104
|
return { entries: [], tokens: 0 };
|
|
94
105
|
}
|
|
95
|
-
const plan = planContext(ctx, opts, sourceOf(
|
|
106
|
+
const plan = planContext(ctx, opts, sourceOf(ctx.store));
|
|
96
107
|
const sections = await loadTaskSections(ctx, opts, plan, openBlockBudget(plan, opts, budget));
|
|
97
108
|
const admission = ambientAdmission(opts, plan, sections.shownHandoff);
|
|
98
109
|
const pools = await loadPools(ctx, plan, admission, promptRecallRequest(opts, plan));
|
|
99
110
|
const noSections = !sections.shownSnapshot && !sections.shownHandoff && sections.shownEvents.length === 0;
|
|
100
|
-
if (
|
|
111
|
+
if (nothingToInject(plan, pools, noSections)) {
|
|
101
112
|
return { entries: [], tokens: 0 };
|
|
102
113
|
}
|
|
103
114
|
const picked = plan.pinnedOnly
|
|
104
115
|
? selectPinned(opts, plan, sections.left, pools, admission)
|
|
105
|
-
: plan.query ===
|
|
116
|
+
: plan.query === NO_QUERY
|
|
106
117
|
? selectStrongest(plan, sections.left, pools)
|
|
107
118
|
: await selectBySearch(ctx, plan, sections.left, pools, admission);
|
|
108
119
|
if (picked === null) {
|
|
@@ -129,8 +140,12 @@ export async function getContext(ctx, opts = {}) {
|
|
|
129
140
|
ambientState: recorded.ambientState,
|
|
130
141
|
};
|
|
131
142
|
}
|
|
143
|
+
function nothingToInject(plan, pools, noSections) {
|
|
144
|
+
return (!plan.promptRecallPending && pools.local.entries.length === 0 && pools.global.entries.length === 0 && noSections);
|
|
145
|
+
}
|
|
132
146
|
const isolationWarned = new Set();
|
|
133
|
-
/** A laptop config copied onto a team store must not open every
|
|
147
|
+
/** A laptop config copied onto a team store must not open every
|
|
148
|
+
* member's rows to every prompt, so the flag loses there. */
|
|
134
149
|
function warnIsolationIgnored(hippoRoot) {
|
|
135
150
|
if (isolationWarned.has(hippoRoot))
|
|
136
151
|
return;
|
|
@@ -140,34 +155,54 @@ function warnIsolationIgnored(hippoRoot) {
|
|
|
140
155
|
/** Which stores this read can draw on, and what kind the primary one is. */
|
|
141
156
|
function storesInReach(ctx, opts, local) {
|
|
142
157
|
const other = hasGroup(local.store, 'localFiles') ? undefined : local.store;
|
|
143
|
-
//
|
|
144
|
-
const
|
|
145
|
-
const globalRoot = getGlobalRoot();
|
|
158
|
+
// No reach means an integrator's own store: one project, no global store beside it.
|
|
159
|
+
const reach = ctx.reach ?? { hasLocal: true, isGlobal: false, shared: isSharedStore(ctx.hippoRoot) };
|
|
146
160
|
// The store's own flag counts too, so no surface can read a shared store as its owner.
|
|
147
|
-
const sharedStore = opts.sharedStore === true ||
|
|
161
|
+
const sharedStore = opts.sharedStore === true || reach.shared;
|
|
148
162
|
// A store serving many people is not its operator's, so the operator's own global store stays out.
|
|
149
|
-
const hasGlobal = !sharedStore && other === undefined &&
|
|
150
|
-
|
|
151
|
-
return {
|
|
163
|
+
const hasGlobal = !sharedStore && other === undefined && reach.global !== undefined;
|
|
164
|
+
// Global memories do not establish a project boundary for task state.
|
|
165
|
+
return {
|
|
166
|
+
other,
|
|
167
|
+
hasLocal: other !== undefined || reach.hasLocal,
|
|
168
|
+
globalRoot: reach.global?.root ?? '',
|
|
169
|
+
sharedStore,
|
|
170
|
+
hasGlobal,
|
|
171
|
+
primaryIsGlobal: reach.isGlobal,
|
|
172
|
+
};
|
|
173
|
+
}
|
|
174
|
+
/** The operator's global store, which planContext proved present before it set hasGlobal. */
|
|
175
|
+
function globalSource(ctx) {
|
|
176
|
+
const global = ctx.reach?.global;
|
|
177
|
+
if (global === undefined)
|
|
178
|
+
throw new Error('hasGlobal without a global store in reach');
|
|
179
|
+
return sourceOf(global.store);
|
|
152
180
|
}
|
|
153
181
|
/** Prices one entry against the budget: the caller's cost model when it gave one, else a token estimate. */
|
|
154
182
|
function entryPricer(cost, currentProject) {
|
|
155
183
|
return (entry, isGlobal, promptRecall) => cost
|
|
156
|
-
? cost.entry({
|
|
184
|
+
? cost.entry({
|
|
185
|
+
entry,
|
|
186
|
+
isGlobal,
|
|
187
|
+
promptRecall,
|
|
188
|
+
origin: entry.origin_project ?? null,
|
|
189
|
+
category: classifyOriginProject(entry.origin_project, currentProject),
|
|
190
|
+
})
|
|
157
191
|
: estimateTokens(entry.content);
|
|
158
192
|
}
|
|
159
193
|
function planContext(ctx, opts, local) {
|
|
160
194
|
const pinnedOnly = opts.pinnedOnly === true;
|
|
161
195
|
const { other, hasLocal, globalRoot, sharedStore, hasGlobal, primaryIsGlobal } = storesInReach(ctx, opts, local);
|
|
162
|
-
const query = (opts.q ?? '').trim() ||
|
|
196
|
+
const query = (opts.q ?? '').trim() || NO_QUERY;
|
|
163
197
|
// opts.scope is only the tag boost, opts.exactScope the envelope request; other-project memories are
|
|
164
198
|
// excluded unless the caller asks for them (crossProject) or isolation is disabled.
|
|
165
|
-
const config =
|
|
199
|
+
const config = configOf(ctx);
|
|
166
200
|
const isolationEnabled = config.contextProjectIsolation !== false;
|
|
167
201
|
const currentProject = opts.currentProject ?? resolveProjectIdentity(process.cwd());
|
|
168
202
|
// A caller with no project reads every row as its own; on a shared store those rows are other people's.
|
|
169
|
-
if (sharedStore && projectId(currentProject).trim() === '')
|
|
170
|
-
throw new BadRequestError(
|
|
203
|
+
if (sharedStore && projectId(currentProject).trim() === '') {
|
|
204
|
+
throw new BadRequestError("a shared store needs the caller's project");
|
|
205
|
+
}
|
|
171
206
|
if (sharedStore && !isolationEnabled)
|
|
172
207
|
warnIsolationIgnored(ctx.hippoRoot);
|
|
173
208
|
const includeCrossProject = opts.crossProject === true || (!isolationEnabled && !sharedStore);
|
|
@@ -208,14 +243,22 @@ function promptRecallRequest(opts, plan) {
|
|
|
208
243
|
? Array.from(promptTokens(opts.prompt ?? ''))
|
|
209
244
|
: [];
|
|
210
245
|
return promptRecallTerms.length > 0
|
|
211
|
-
? {
|
|
246
|
+
? {
|
|
247
|
+
terms: promptRecallTerms,
|
|
248
|
+
limit: Math.floor(finiteOr(pinnedInject.promptRecallCandidates, 100, 1)),
|
|
249
|
+
ownScope: plan.ownScope,
|
|
250
|
+
}
|
|
212
251
|
: undefined;
|
|
213
252
|
}
|
|
214
253
|
/** Reports the block's facts to the observer and returns the budget left after the fixed headers. */
|
|
215
254
|
function openBlockBudget(plan, opts, budget) {
|
|
216
255
|
const { config, cost, obs, pinnedOnly, promptRecallPending } = plan;
|
|
217
256
|
const blockBudget = pinnedOnly && opts.budget === undefined ? config.pinnedInject.budget : budget;
|
|
218
|
-
obs?.facts({
|
|
257
|
+
obs?.facts({
|
|
258
|
+
projectName: projectId(plan.currentProject),
|
|
259
|
+
budgetTokens: blockBudget,
|
|
260
|
+
promptRecall: promptRecallPending,
|
|
261
|
+
});
|
|
219
262
|
if (pinnedOnly && !config.pinnedInject.enabled)
|
|
220
263
|
obs?.disabled();
|
|
221
264
|
if (!pinnedOnly)
|
|
@@ -234,7 +277,8 @@ async function loadRawTaskState(ctx, opts, plan) {
|
|
|
234
277
|
if (!plan.hasLocalTaskState)
|
|
235
278
|
return NO_TASK_STATE;
|
|
236
279
|
const { store, reads } = plan.local;
|
|
237
|
-
// On a shared store task state is one person's, keyed by owner
|
|
280
|
+
// On a shared store task state is one person's, keyed by owner
|
|
281
|
+
// and project so it follows them into their next session.
|
|
238
282
|
const key = plan.sharedStore
|
|
239
283
|
? { owner: ownerOrSubject(ctx.actor), project: projectNames(plan.currentProject) }
|
|
240
284
|
: null;
|
|
@@ -245,18 +289,17 @@ async function loadRawTaskState(ctx, opts, plan) {
|
|
|
245
289
|
if (snapshot?.session_id)
|
|
246
290
|
return { snapshot, handoff: block.sessionHandoff, events: block.recentSessionEvents };
|
|
247
291
|
// An unfinished handoff's scope is admitted in the read, so a newer denied row can't hide an older eligible one.
|
|
248
|
-
return {
|
|
292
|
+
return {
|
|
293
|
+
snapshot,
|
|
294
|
+
handoff: await reads.unfinishedHandoff(ctx.tenantId, SNAPSHOT_AMBIENT_MAX_AGE_MS, key),
|
|
295
|
+
events: [],
|
|
296
|
+
};
|
|
249
297
|
}
|
|
250
|
-
// Sections print ahead of the memories, so they are paid first;
|
|
298
|
+
// Sections print ahead of the memories, so they are paid first;
|
|
299
|
+
// one that does not fit is dropped, as an oversize entry is.
|
|
251
300
|
async function loadTaskSections(ctx, opts, plan, startLeft) {
|
|
252
301
|
const { exactScope, ownScope, cost } = plan;
|
|
253
|
-
|
|
254
|
-
const pays = (tokens) => {
|
|
255
|
-
if (tokens > left)
|
|
256
|
-
return false;
|
|
257
|
-
left -= tokens;
|
|
258
|
-
return true;
|
|
259
|
-
};
|
|
302
|
+
const { pays, left } = tokenPurse(startLeft);
|
|
260
303
|
const rowScope = (r) => r?.scope ?? null;
|
|
261
304
|
const raw = await loadRawTaskState(ctx, opts, plan);
|
|
262
305
|
// The same envelope rule ambientAdmitEntry applies to memory rows.
|
|
@@ -266,15 +309,20 @@ async function loadTaskSections(ctx, opts, plan, startLeft) {
|
|
|
266
309
|
const shownSnapshot = activeSnapshot && (!cost || pays(cost.snapshot(activeSnapshot))) ? activeSnapshot : null;
|
|
267
310
|
const shownHandoff = sessionHandoff && (!cost || pays(cost.handoff(sessionHandoff))) ? sessionHandoff : null;
|
|
268
311
|
const shownEvents = recentSessionEvents.length > 0 && (!cost || pays(cost.trail(recentSessionEvents))) ? recentSessionEvents : [];
|
|
269
|
-
plan.obs?.sections(Number(shownSnapshot !== null) + Number(shownHandoff !== null) + Number(shownEvents.length > 0), Number(activeSnapshot !== shownSnapshot) +
|
|
270
|
-
|
|
312
|
+
plan.obs?.sections(Number(shownSnapshot !== null) + Number(shownHandoff !== null) + Number(shownEvents.length > 0), Number(activeSnapshot !== shownSnapshot) +
|
|
313
|
+
Number(sessionHandoff !== shownHandoff) +
|
|
314
|
+
Number(recentSessionEvents.length !== shownEvents.length));
|
|
315
|
+
return { activeSnapshot, shownSnapshot, shownHandoff, shownEvents, left: left() };
|
|
271
316
|
}
|
|
272
317
|
function ambientAdmission(opts, plan, shownHandoff) {
|
|
273
318
|
const transcriptHandoffSession = shownHandoff?.evidence?.derivedFrom === 'transcript' ? shownHandoff.sessionId : null;
|
|
274
319
|
const ambientAdmit = (e) => {
|
|
275
320
|
// A printed handoff already carries the session's closing message, which its digest would print a second time.
|
|
276
|
-
if (transcriptHandoffSession !== null &&
|
|
321
|
+
if (transcriptHandoffSession !== null &&
|
|
322
|
+
e.source_session_id === transcriptHandoffSession &&
|
|
323
|
+
isSessionDigestRow(e)) {
|
|
277
324
|
return false;
|
|
325
|
+
}
|
|
278
326
|
return ambientAdmitEntry(e, plan.currentProject, plan.includeCrossProject, plan.exactScope, plan.ownScope);
|
|
279
327
|
};
|
|
280
328
|
const ownSessionId = opts.currentSessionId || '';
|
|
@@ -282,13 +330,15 @@ function ambientAdmission(opts, plan, shownHandoff) {
|
|
|
282
330
|
const isOwnCompactionItem = (e) => ownSessionId !== '' &&
|
|
283
331
|
e.source_session_id === ownSessionId &&
|
|
284
332
|
e.tags.includes(COMPACTION_MEMORY_TAG);
|
|
285
|
-
// Superseded rows never inject; which rows reach ambientAdmitEntry
|
|
333
|
+
// Superseded rows never inject; which rows reach ambientAdmitEntry
|
|
334
|
+
// matters because it regex-scans content for secrets.
|
|
286
335
|
const admit = (e) => !e.superseded_by && !isOwnCompactionItem(e) && ambientAdmit(e);
|
|
287
336
|
// The two-store search has always ranked a session's own compaction items; only the local search drops them.
|
|
288
337
|
const bothStoresAdmit = (e) => !e.superseded_by && ambientAdmit(e);
|
|
289
338
|
return { ambientAdmit, admit, bothStoresAdmit };
|
|
290
339
|
}
|
|
291
|
-
/** Origins the recent backfill may read past its first window;
|
|
340
|
+
/** Origins the recent backfill may read past its first window;
|
|
341
|
+
* on a shared store, only the caller's own project rows. */
|
|
292
342
|
function recentOrigins(plan) {
|
|
293
343
|
if (plan.sharedStore)
|
|
294
344
|
return { names: projectNames(plan.currentProject).filter((n) => n !== ''), userGlobal: false };
|
|
@@ -297,7 +347,7 @@ function recentOrigins(plan) {
|
|
|
297
347
|
async function loadPools(ctx, plan, admission, recallRequest) {
|
|
298
348
|
const { obs, pinnedOnly, primaryIsGlobal, hasGlobal, exactScope, ownScope } = plan;
|
|
299
349
|
const recent = { needed: plan.includeRecent, origins: recentOrigins(plan) };
|
|
300
|
-
const searches = plan.query !==
|
|
350
|
+
const searches = plan.query !== NO_QUERY && !pinnedOnly;
|
|
301
351
|
const searchesBoth = searches && hasGlobal && !primaryIsGlobal;
|
|
302
352
|
const poolAdmit = searchesBoth ? admission.bothStoresAdmit : admission.admit;
|
|
303
353
|
const loadAdmit = obs ? obs.watchAdmit(poolAdmit) : poolAdmit;
|
|
@@ -318,7 +368,10 @@ async function loadPools(ctx, plan, admission, recallRequest) {
|
|
|
318
368
|
? await loadAmbientEntries(plan.local, ctx.tenantId, { ...read, onQualityDrop: qualityDrop(primaryIsGlobal) })
|
|
319
369
|
: { entries: [] };
|
|
320
370
|
const global = hasGlobal && !primaryIsGlobal
|
|
321
|
-
? await loadAmbientEntries(
|
|
371
|
+
? await loadAmbientEntries(globalSource(ctx), ctx.tenantId, {
|
|
372
|
+
...read,
|
|
373
|
+
onQualityDrop: qualityDrop(true),
|
|
374
|
+
})
|
|
322
375
|
: { entries: [] };
|
|
323
376
|
return { local, global };
|
|
324
377
|
}
|
|
@@ -327,7 +380,7 @@ function finalizeSelection(picked, plan) {
|
|
|
327
380
|
const { obs } = plan;
|
|
328
381
|
// Ranking reports nothing itself, so its results are offered here and the cuts below can name what they drop.
|
|
329
382
|
if (!plan.pinnedOnly && obs) {
|
|
330
|
-
const pool = plan.query ===
|
|
383
|
+
const pool = plan.query === NO_QUERY ? 'strength' : 'search';
|
|
331
384
|
obs.offer(picked.filter((r) => r.isGlobal !== true).map((r) => r.entry), false, pool);
|
|
332
385
|
obs.offer(picked.filter((r) => r.isGlobal === true).map((r) => r.entry), true, pool);
|
|
333
386
|
}
|
|
@@ -337,11 +390,13 @@ function finalizeSelection(picked, plan) {
|
|
|
337
390
|
obs?.dropMissing(selected.map((r) => r.entry), cut.map((r) => r.entry), 'limit', 'limit');
|
|
338
391
|
selected = cut;
|
|
339
392
|
}
|
|
340
|
-
|
|
393
|
+
// After the last cut, so a merged row that was cut hides nothing.
|
|
394
|
+
const heldDropped = dropHeldCopies(selected, (r) => r.entry);
|
|
341
395
|
obs?.dropMissing(selected.map((r) => r.entry), heldDropped.map((r) => r.entry), 'limit', 'duplicate');
|
|
342
396
|
selected = heldDropped;
|
|
343
397
|
const tokens = selected.reduce((sum, r) => sum + r.tokens, 0);
|
|
344
|
-
// Every returned entry carries its origin and how it relates to
|
|
398
|
+
// Every returned entry carries its origin and how it relates to
|
|
399
|
+
// the active project, so renderers can mark cross-project rows.
|
|
345
400
|
selected = selected.map((r) => ({
|
|
346
401
|
...r,
|
|
347
402
|
origin: r.entry.origin_project ?? null,
|
|
@@ -363,11 +418,11 @@ async function traceEmptyContext(ctx, opts, plan) {
|
|
|
363
418
|
};
|
|
364
419
|
// The empty reply is already decided, so a lost trace is logged and the call still answers.
|
|
365
420
|
try {
|
|
366
|
-
await
|
|
421
|
+
await ctx.store.finishRecall({ goalLog: [], audit: [], trace });
|
|
367
422
|
}
|
|
368
423
|
catch (error) {
|
|
369
424
|
rethrowIfSqliteBlocked(error);
|
|
370
|
-
log.error(`recall trace write failed: ${errorMessage(error)}
|
|
425
|
+
log.error(`recall trace write failed: ${errorMessage(error)}`, errorFields(error));
|
|
371
426
|
}
|
|
372
427
|
}
|
|
373
428
|
/** Strengthens and marks the returned rows, then writes the trace and index together. */
|
|
@@ -388,7 +443,7 @@ async function recordRetrieval(ctx, opts, plan, selected, activeSnapshot) {
|
|
|
388
443
|
};
|
|
389
444
|
const writes = { goalLog: [], audit: [], trace, strengthen: strengthenOf(ctx, retrievedIds) };
|
|
390
445
|
// The last recall feeds only outcomeForLastRecall, so a store that keeps none still finishes the recall without one.
|
|
391
|
-
const store =
|
|
446
|
+
const store = ctx.store;
|
|
392
447
|
const traceId = store.lastRecall
|
|
393
448
|
? await store.lastRecall.finishRecall(writes, plan.hasGlobal ? plan.globalRoot : undefined)
|
|
394
449
|
: await store.finishRecall(writes).then(() => null);
|
|
@@ -413,7 +468,7 @@ async function readAmbientState(ctx, plan) {
|
|
|
413
468
|
};
|
|
414
469
|
const sources = [
|
|
415
470
|
...(plan.hasLocal ? [plan.local.reads] : []),
|
|
416
|
-
...(plan.hasGlobal && !plan.primaryIsGlobal ? [
|
|
471
|
+
...(plan.hasGlobal && !plan.primaryIsGlobal ? [globalSource(ctx).reads] : []),
|
|
417
472
|
];
|
|
418
473
|
const tallies = [];
|
|
419
474
|
for (const reads of sources)
|