hippo-memory 1.72.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/README.md +6 -4
- 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 -5
- package/dist/api/{audit.d.ts → auth/audit.d.ts} +18 -16
- package/dist/api/auth/audit.js +58 -0
- package/dist/api/{auth.d.ts → auth/auth.d.ts} +19 -16
- package/dist/api/{auth.js → auth/auth.js} +66 -54
- package/dist/api/{quarantine.d.ts → auth/quarantine.d.ts} +8 -7
- package/dist/api/{quarantine.js → auth/quarantine.js} +8 -7
- 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 +14 -4
- package/dist/api/context-render.js +14 -7
- package/dist/api/context-select.d.ts +4 -1
- package/dist/api/context-select.js +31 -34
- package/dist/api/context-types.d.ts +38 -12
- package/dist/api/context.d.ts +8 -5
- package/dist/api/context.js +120 -63
- 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} +23 -17
- package/dist/api/memories/memories.d.ts +27 -0
- package/dist/api/memories/memories.js +52 -0
- package/dist/api/memories/outcome.d.ts +22 -0
- package/dist/api/memories/outcome.js +28 -0
- package/dist/api/memories/promote.d.ts +40 -0
- package/dist/api/memories/promote.js +76 -0
- 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} +17 -9
- package/dist/api/{remember-local.js → memories/remember-local.js} +46 -24
- package/dist/api/{remember.d.ts → memories/remember.d.ts} +22 -13
- package/dist/api/{remember.js → memories/remember.js} +50 -32
- 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 -7
- 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 -3
- package/dist/api/objects/predictions.d.ts +11 -0
- package/dist/api/{predictions.js → objects/predictions.js} +7 -5
- 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 +35 -20
- package/dist/api/prompt-hook.js +66 -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} +185 -101
- package/dist/api/recall/recall.d.ts +6 -0
- package/dist/api/{recall.js → recall/recall.js} +116 -72
- 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 -68
- package/dist/api/{recall-types.js → recall/types.js} +1 -1
- package/dist/api/session-end.d.ts +36 -8
- package/dist/api/session-end.js +71 -25
- 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} +54 -45
- 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 +27 -12
- 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 +34 -15
- 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 +18 -9
- package/dist/capture/compaction-spool.js +105 -63
- 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 +58 -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 +33 -33
- package/dist/cli/auth.js +23 -31
- 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 -5
- package/dist/cli/client.js +53 -23
- package/dist/cli/compact-resume-payload.d.ts +4 -1
- package/dist/cli/compact-resume-payload.js +12 -5
- package/dist/cli/context.js +43 -18
- package/dist/cli/continuity.d.ts +5 -5
- package/dist/cli/continuity.js +90 -107
- package/dist/cli/curate.d.ts +5 -4
- package/dist/cli/curate.js +55 -77
- package/dist/cli/dag.d.ts +1 -1
- package/dist/cli/dag.js +14 -17
- package/dist/cli/decisions.js +30 -30
- 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 +34 -10
- package/dist/cli/hook-runtime.js +41 -16
- package/dist/cli/incidents.d.ts +1 -1
- package/dist/cli/incidents.js +25 -25
- package/dist/cli/init.d.ts +1 -1
- package/dist/cli/init.js +35 -20
- 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 +5 -5
- package/dist/cli/object-verbs.js +13 -16
- 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 +17 -22
- package/dist/cli/print.js +4 -2
- package/dist/cli/projects.js +21 -11
- package/dist/cli/quality-repair-once.d.ts +1 -1
- package/dist/cli/quality-repair-once.js +7 -6
- package/dist/cli/recall.js +129 -93
- package/dist/cli/refine-llm.d.ts +15 -4
- package/dist/cli/refine-llm.js +17 -7
- package/dist/cli/remember.js +51 -55
- package/dist/cli/scheduler.d.ts +4 -1
- package/dist/cli/scheduler.js +9 -5
- package/dist/cli/serve.js +28 -18
- package/dist/cli/session-hooks.d.ts +2 -6
- package/dist/cli/session-hooks.js +140 -112
- package/dist/cli/setup.d.ts +1 -1
- package/dist/cli/setup.js +56 -34
- package/dist/cli/shared.d.ts +4 -2
- package/dist/cli/shared.js +26 -11
- 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 +16 -8
- 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 +4 -4
- package/dist/cli/transfer.js +97 -82
- package/dist/cli/usage.d.ts +1 -1
- package/dist/cli/usage.js +1 -1
- package/dist/cli/verb-row.d.ts +2 -0
- package/dist/cli/verbs/health.js +2 -0
- package/dist/cli/verbs/memory.js +47 -53
- package/dist/cli/verbs/objects.js +16 -7
- package/dist/cli/verbs/sessions.js +4 -2
- package/dist/cli/versioned-verbs.d.ts +8 -7
- package/dist/cli/versioned-verbs.js +31 -21
- package/dist/cli.js +14 -18
- package/dist/connectors/dlq.d.ts +6 -6
- package/dist/connectors/dlq.js +12 -7
- 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 -4
- 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 -5
- 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 -5
- 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 +36 -23
- package/dist/connectors/ingest.d.ts +5 -3
- package/dist/connectors/ingest.js +3 -3
- 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 -5
- 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 -4
- 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 -5
- 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 +24 -10
- package/dist/consolidate/dag-summary.js +2 -1
- package/dist/consolidate/dag.d.ts +10 -5
- package/dist/consolidate/dag.js +45 -39
- package/dist/consolidate/decay.js +19 -6
- package/dist/consolidate/dedupe.d.ts +14 -5
- package/dist/consolidate/dedupe.js +28 -17
- 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 +37 -14
- package/dist/consolidate/merge.d.ts +4 -1
- package/dist/consolidate/merge.js +47 -37
- 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 +42 -39
- package/dist/consolidate/trace.d.ts +7 -2
- package/dist/consolidate/trace.js +7 -2
- package/dist/consolidate/traces.js +27 -30
- 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 +38 -29
- 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 +22 -17
- 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 +87 -30
- package/dist/core/memory.js +82 -33
- 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 +39 -11
- package/dist/core/physics.js +71 -21
- package/dist/core/project-identity.d.ts +34 -17
- package/dist/core/project-identity.js +35 -18
- 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.d.ts +2 -2
- package/dist/dashboard/dashboard-actions.js +18 -7
- package/dist/dashboard/dashboard-queries.js +2 -7
- package/dist/dashboard/dashboard-snapshot.d.ts +2 -2
- package/dist/dashboard/dashboard-snapshot.js +5 -7
- package/dist/dashboard/dashboard.js +22 -8
- 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 -2
- package/dist/db/connect.js +8 -2
- 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 +40 -20
- 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/v11.js +1 -0
- package/dist/db/migrations/v12.js +2 -1
- package/dist/db/migrations/v14.js +2 -0
- 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 -8
- package/dist/db/physics-state.js +17 -50
- 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 +20 -5
- package/dist/db/request-stores.js +15 -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 +35 -14
- package/dist/db/wal-checkpointer.d.ts +2 -1
- package/dist/db/wal-checkpointer.js +19 -7
- package/dist/doctor.d.ts +7 -1
- package/dist/doctor.js +128 -46
- package/dist/embeddings/local.d.ts +8 -4
- package/dist/embeddings/local.js +11 -7
- package/dist/embeddings/provider.d.ts +19 -10
- package/dist/embeddings/provider.js +32 -27
- 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 +50 -0
- package/dist/entry/store-kit.js +27 -0
- package/dist/entry/testing.d.ts +6 -0
- package/dist/entry/testing.js +7 -0
- 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 +17 -7
- 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 +72 -33
- 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 +11 -10
- 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 +3 -3
- package/dist/importers/vault.js +61 -45
- package/dist/index.d.ts +33 -7
- package/dist/index.js +26 -8
- package/dist/learn/autolearn.d.ts +21 -6
- package/dist/learn/autolearn.js +57 -26
- 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 +17 -10
- 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 -6
- package/dist/learn/invalidation.js +62 -28
- 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 +21 -20
- 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 +61 -77
- 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 +59 -23
- 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 +19 -9
- 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 +12 -4
- package/dist/search/embed-memories.js +96 -58
- package/dist/search/engine.d.ts +11 -0
- package/dist/search/engine.js +14 -0
- 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 +14 -8
- package/dist/server/auth.d.ts +19 -15
- package/dist/server/auth.js +68 -38
- package/dist/server/boot.d.ts +4 -1
- package/dist/server/boot.js +115 -67
- package/dist/server/client-ip.d.ts +17 -5
- package/dist/server/client-ip.js +56 -21
- 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 +550 -97
- 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 -17
- 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 +40 -18
- package/dist/server/tls.d.ts +10 -2
- package/dist/server/tls.js +25 -5
- package/dist/server/types.d.ts +41 -24
- package/dist/server/validation.d.ts +4 -1
- package/dist/server/validation.js +22 -9
- package/dist/server.d.ts +17 -49
- package/dist/server.js +33 -40
- package/dist/sharing/global-store.d.ts +6 -12
- package/dist/sharing/global-store.js +8 -48
- package/dist/sharing/global-sync.d.ts +3 -1
- package/dist/sharing/global-sync.js +17 -7
- 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 +28 -14
- package/dist/sharing/share.d.ts +8 -4
- package/dist/sharing/share.js +40 -18
- package/dist/store/ambient.js +10 -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 +90 -41
- 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 +97 -63
- 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 +101 -37
- package/dist/store/compactions.js +35 -15
- package/dist/store/conflicts.d.ts +16 -5
- package/dist/store/conflicts.js +104 -48
- package/dist/store/connectors/dlq.d.ts +17 -5
- package/dist/store/connectors/dlq.js +58 -6
- package/dist/store/connectors/event-log.d.ts +122 -0
- package/dist/store/connectors/event-log.js +25 -0
- package/dist/store/connectors/github.d.ts +6 -3
- package/dist/store/connectors/github.js +30 -48
- package/dist/store/connectors/slack.d.ts +2 -1
- package/dist/store/connectors/slack.js +31 -47
- package/dist/store/dashboard-reads.d.ts +7 -3
- package/dist/store/dashboard-reads.js +32 -10
- package/dist/store/delete-and-batch.d.ts +17 -11
- package/dist/store/delete-and-batch.js +70 -28
- package/dist/store/delivery-recorder.d.ts +10 -7
- package/dist/store/delivery-recorder.js +70 -37
- package/dist/store/descendant-page.d.ts +2 -1
- package/dist/store/descendant-page.js +26 -10
- 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 +45 -19
- package/dist/store/embeddings/index.d.ts +13 -9
- package/dist/store/embeddings/index.js +19 -12
- package/dist/store/entry-reads.d.ts +72 -21
- package/dist/store/entry-reads.js +215 -69
- package/dist/store/entry-row.d.ts +10 -6
- package/dist/store/entry-row.js +26 -14
- package/dist/store/entry-writes.d.ts +28 -13
- package/dist/store/entry-writes.js +61 -22
- 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 +11 -12
- 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 +29 -19
- package/dist/store/graph-rows.d.ts +41 -3
- package/dist/store/graph-rows.js +10 -7
- package/dist/store/graph-view-rows.js +15 -7
- package/dist/store/graph-writes.d.ts +16 -10
- package/dist/store/graph-writes.js +59 -36
- package/dist/store/half-life.js +2 -2
- package/dist/store/handoffs.d.ts +13 -7
- package/dist/store/handoffs.js +44 -22
- 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 +4 -2
- package/dist/store/index.js +2 -1
- 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 +96 -19
- package/dist/store/narrow.d.ts +6 -0
- package/dist/store/narrow.js +11 -0
- package/dist/store/open.d.ts +6 -3
- package/dist/store/open.js +20 -10
- 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 +261 -219
- 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 +128 -64
- package/dist/store/rejected-values.d.ts +15 -10
- package/dist/store/rejected-values.js +46 -20
- 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 +20 -13
- package/dist/store/rule-sql.d.ts +7 -3
- package/dist/store/rule-sql.js +26 -13
- package/dist/store/search-rows.d.ts +16 -11
- package/dist/store/search-rows.js +54 -32
- 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 +12 -5
- 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 +9 -6
- 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 +8 -0
- package/dist/store/sqlite/held-connection.js +34 -7
- package/dist/store/sqlite/last-recall-group.d.ts +15 -0
- package/dist/store/sqlite/last-recall-group.js +62 -0
- 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.d.ts +6 -0
- package/dist/store/sqlite/maintenance-groups.js +61 -0
- 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 +97 -38
- 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 -18
- package/dist/store/sqlite/store.js +95 -33
- 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 +25 -11
- package/dist/store/summaries.js +84 -27
- 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 +8 -4
- 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 +28 -11
- 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 +7 -2
- package/dist/util/anthropic-messages.js +18 -7
- package/dist/util/atomic-write.d.ts +8 -3
- package/dist/util/atomic-write.js +36 -21
- 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 +26 -5
- package/dist/util/env.js +87 -25
- package/dist/util/format.d.ts +2 -0
- package/dist/util/format.js +4 -0
- 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 +16 -4
- package/dist/util/request-scope.js +19 -6
- 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 +11 -0
- package/dist/util/spawn-argv.js +66 -0
- package/dist/util/sql.d.ts +3 -0
- package/dist/util/sql.js +6 -0
- 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/vector-codec.d.ts +4 -0
- package/dist/util/vector-codec.js +15 -0
- 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 +4 -1
- package/scripts/postinstall.cjs +3 -1
- package/dist/api/audit.js +0 -56
- 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 -7
- package/dist/api/learn.js +0 -124
- package/dist/api/memories.d.ts +0 -23
- package/dist/api/memories.js +0 -46
- package/dist/api/objects.d.ts +0 -9
- package/dist/api/on-store.d.ts +0 -16
- package/dist/api/on-store.js +0 -38
- package/dist/api/outcome.d.ts +0 -19
- package/dist/api/outcome.js +0 -21
- package/dist/api/predictions.d.ts +0 -11
- package/dist/api/promote.d.ts +0 -36
- package/dist/api/promote.js +0 -65
- package/dist/api/recall-core.d.ts +0 -4
- package/dist/api/recall-core.js +0 -120
- 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 -10
- package/dist/cli/lenient-id.d.ts +0 -2
- package/dist/cli/lenient-id.js +0 -13
- 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 -21
- package/dist/store/sqlite/local.js +0 -39
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 {
|
|
19
|
+
import { hasGroup } from '../store/index.js';
|
|
20
20
|
import { passesScopeFilterForRecall, assertScopeRequestAllowed, personalScopeOf } from '../core/recall-scope.js';
|
|
21
21
|
import { finiteOr, selectBySearch, selectPinned, selectStrongest, } from './context-select.js';
|
|
22
|
-
import {
|
|
23
|
-
import {
|
|
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,16 +47,18 @@ 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) {
|
|
56
60
|
const { pinnedOnly, recent, admit, recheck, window, recall, onQualityDrop } = options;
|
|
57
|
-
const ownTenant = (e) => e.
|
|
61
|
+
const ownTenant = (e) => e.tenant_id === tenantId;
|
|
58
62
|
if (!pinnedOnly) {
|
|
59
63
|
const rows = 'query' in window
|
|
60
64
|
? await source.store.searchRecallEntries(window.query, {
|
|
@@ -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;
|
|
@@ -139,35 +154,55 @@ function warnIsolationIgnored(hippoRoot) {
|
|
|
139
154
|
}
|
|
140
155
|
/** Which stores this read can draw on, and what kind the primary one is. */
|
|
141
156
|
function storesInReach(ctx, opts, local) {
|
|
142
|
-
const other = local.store
|
|
143
|
-
//
|
|
144
|
-
const
|
|
145
|
-
const globalRoot = getGlobalRoot();
|
|
157
|
+
const other = hasGroup(local.store, 'localFiles') ? undefined : local.store;
|
|
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. */
|
|
@@ -387,11 +442,13 @@ async function recordRetrieval(ctx, opts, plan, selected, activeSnapshot) {
|
|
|
387
442
|
})),
|
|
388
443
|
};
|
|
389
444
|
const writes = { goalLog: [], audit: [], trace, strengthen: strengthenOf(ctx, retrievedIds) };
|
|
390
|
-
//
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
445
|
+
// The last recall feeds only outcomeForLastRecall, so a store that keeps none still finishes the recall without one.
|
|
446
|
+
const store = ctx.store;
|
|
447
|
+
const traceId = store.lastRecall
|
|
448
|
+
? await store.lastRecall.finishRecall(writes, plan.hasGlobal ? plan.globalRoot : undefined)
|
|
449
|
+
: await store.finishRecall(writes).then(() => null);
|
|
450
|
+
plan.obs?.traced(traceId);
|
|
451
|
+
await store.bumpRecallStats(selected.length);
|
|
395
452
|
// Replace selectedItems entries with markRetrieved-updated copies so
|
|
396
453
|
// the returned ContextResult reflects post-recall state.
|
|
397
454
|
const items = selected.map((s) => ({
|
|
@@ -411,7 +468,7 @@ async function readAmbientState(ctx, plan) {
|
|
|
411
468
|
};
|
|
412
469
|
const sources = [
|
|
413
470
|
...(plan.hasLocal ? [plan.local.reads] : []),
|
|
414
|
-
...(plan.hasGlobal && !plan.primaryIsGlobal ? [
|
|
471
|
+
...(plan.hasGlobal && !plan.primaryIsGlobal ? [globalSource(ctx).reads] : []),
|
|
415
472
|
];
|
|
416
473
|
const tallies = [];
|
|
417
474
|
for (const reads of sources)
|
package/dist/api/continuity.d.ts
CHANGED
|
@@ -1,47 +1,50 @@
|
|
|
1
1
|
import type { HandoffOutcome, SessionHandoff } from '../core/handoff.js';
|
|
2
2
|
import type { SessionEvent, TaskSnapshot } from '../store/rows.js';
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import type {
|
|
3
|
+
import type { SessionEventInput, SnapshotInput } from '../store/sessions.js';
|
|
4
|
+
import type { Sessions } from '../store/index.js';
|
|
5
|
+
import type { WorkingMemoryItem } from '../store/working-memory.js';
|
|
6
|
+
import type { ContextWith } from './types.js';
|
|
7
|
+
type Ctx = ContextWith<'sessions'>;
|
|
6
8
|
/** What a snapshot save carries. */
|
|
7
|
-
export type SnapshotSaveInput =
|
|
9
|
+
export type SnapshotSaveInput = SnapshotInput;
|
|
8
10
|
/** What a session event append carries. */
|
|
9
|
-
export type SessionEventAppendInput =
|
|
11
|
+
export type SessionEventAppendInput = SessionEventInput;
|
|
10
12
|
/** What a session event listing filters on. */
|
|
11
|
-
export type SessionEventListOpts =
|
|
13
|
+
export type SessionEventListOpts = Parameters<Sessions['listEvents']>[1];
|
|
12
14
|
/** Save the caller's active task snapshot. */
|
|
13
|
-
export declare function snapshotSave(ctx:
|
|
15
|
+
export declare function snapshotSave(ctx: Ctx, input: SnapshotSaveInput): Promise<TaskSnapshot>;
|
|
14
16
|
/** Clear the caller's active task snapshot; false when there was none. */
|
|
15
|
-
export declare function snapshotClear(ctx:
|
|
17
|
+
export declare function snapshotClear(ctx: Ctx, status: string): Promise<boolean>;
|
|
16
18
|
/** The caller's active task snapshot, or null. */
|
|
17
|
-
export declare function snapshotLoad(ctx:
|
|
19
|
+
export declare function snapshotLoad(ctx: Ctx): Promise<TaskSnapshot | null>;
|
|
18
20
|
/** Append a session event in the caller's tenant. */
|
|
19
|
-
export declare function sessionEventAppend(ctx:
|
|
21
|
+
export declare function sessionEventAppend(ctx: Ctx, event: SessionEventAppendInput): Promise<SessionEvent>;
|
|
20
22
|
/** List the caller's session events. */
|
|
21
|
-
export declare function sessionEventList(ctx:
|
|
23
|
+
export declare function sessionEventList(ctx: Ctx, opts: SessionEventListOpts): Promise<SessionEvent[]>;
|
|
22
24
|
export interface LatestContinuity {
|
|
23
25
|
snapshot: TaskSnapshot | null;
|
|
24
26
|
events: SessionEvent[];
|
|
25
27
|
}
|
|
26
28
|
/** The active snapshot plus recent events for `sessionId`, falling back to the snapshot's own session. */
|
|
27
|
-
export declare function continuityLatest(ctx:
|
|
29
|
+
export declare function continuityLatest(ctx: Ctx, opts: {
|
|
28
30
|
sessionId?: string;
|
|
29
31
|
limit: number;
|
|
30
|
-
}): LatestContinuity
|
|
32
|
+
}): Promise<LatestContinuity>;
|
|
31
33
|
/** Stamp the outcome on the caller's handoff for `sessionId`; returns the rows stamped. */
|
|
32
|
-
export declare function handoffStampOutcome(ctx:
|
|
34
|
+
export declare function handoffStampOutcome(ctx: Ctx, sessionId: string, outcome: HandoffOutcome): Promise<number>;
|
|
33
35
|
/** Save a session handoff in the caller's tenant. */
|
|
34
|
-
export declare function handoffSave(ctx:
|
|
36
|
+
export declare function handoffSave(ctx: Ctx, handoff: Omit<SessionHandoff, 'updatedAt'>): Promise<SessionHandoff>;
|
|
35
37
|
/** The caller's latest handoff, optionally for one session. */
|
|
36
|
-
export declare function handoffLatest(ctx:
|
|
38
|
+
export declare function handoffLatest(ctx: Ctx, sessionId?: string): Promise<SessionHandoff | null>;
|
|
37
39
|
/** The caller's handoff by id, or null. */
|
|
38
|
-
export declare function handoffById(ctx:
|
|
40
|
+
export declare function handoffById(ctx: Ctx, id: number): Promise<SessionHandoff | null>;
|
|
39
41
|
/** Push a working memory entry in the caller's tenant; returns its row id. */
|
|
40
|
-
export declare function workingMemoryPush(ctx:
|
|
42
|
+
export declare function workingMemoryPush(ctx: Ctx, opts: Parameters<Sessions['pushWorkingMemory']>[1]): Promise<number>;
|
|
41
43
|
/** The caller's working memory entries, most important first. */
|
|
42
|
-
export declare function workingMemoryRead(ctx:
|
|
44
|
+
export declare function workingMemoryRead(ctx: Ctx, opts: Parameters<Sessions['readWorkingMemory']>[1]): Promise<WorkingMemoryItem[]>;
|
|
43
45
|
/** Delete the caller's working memory entries; returns the count. */
|
|
44
|
-
export declare function workingMemoryClear(ctx:
|
|
46
|
+
export declare function workingMemoryClear(ctx: Ctx, opts: Parameters<Sessions['clearWorkingMemory']>[1]): Promise<number>;
|
|
45
47
|
/** Flush the caller's working memory at session end; returns the count. */
|
|
46
|
-
export declare function workingMemoryFlush(ctx:
|
|
48
|
+
export declare function workingMemoryFlush(ctx: Ctx, opts: Parameters<Sessions['clearWorkingMemory']>[1]): Promise<number>;
|
|
49
|
+
export {};
|
|
47
50
|
//# sourceMappingURL=continuity.d.ts.map
|
package/dist/api/continuity.js
CHANGED
|
@@ -1,66 +1,64 @@
|
|
|
1
1
|
// Where-you-left-off ops: task snapshot, session events, handoffs and working memory.
|
|
2
|
-
import { appendSessionEvent, clearActiveTaskSnapshot, listSessionEvents, loadActiveTaskSnapshot, saveActiveTaskSnapshot, } from '../store/sessions.js';
|
|
3
|
-
import { loadHandoffById, loadLatestHandoff, saveSessionHandoff, stampHandoffOutcome } from '../store/handoffs.js';
|
|
4
|
-
import { wmClear, wmFlush, wmPush, wmRead } from '../store/working-memory.js';
|
|
5
2
|
/** Save the caller's active task snapshot. */
|
|
6
3
|
export function snapshotSave(ctx, input) {
|
|
7
|
-
return
|
|
4
|
+
return ctx.store.sessions.saveSnapshot(ctx.tenantId, input, null);
|
|
8
5
|
}
|
|
9
6
|
/** Clear the caller's active task snapshot; false when there was none. */
|
|
10
7
|
export function snapshotClear(ctx, status) {
|
|
11
|
-
return
|
|
8
|
+
return ctx.store.sessions.clearSnapshot(ctx.tenantId, status);
|
|
12
9
|
}
|
|
13
10
|
/** The caller's active task snapshot, or null. */
|
|
14
11
|
export function snapshotLoad(ctx) {
|
|
15
|
-
return
|
|
12
|
+
return ctx.store.sessions.loadSnapshot(ctx.tenantId, null);
|
|
16
13
|
}
|
|
17
14
|
/** Append a session event in the caller's tenant. */
|
|
18
15
|
export function sessionEventAppend(ctx, event) {
|
|
19
|
-
return
|
|
16
|
+
return ctx.store.sessions.appendEvent(ctx.tenantId, event);
|
|
20
17
|
}
|
|
21
18
|
/** List the caller's session events. */
|
|
22
19
|
export function sessionEventList(ctx, opts) {
|
|
23
|
-
return
|
|
20
|
+
return ctx.store.sessions.listEvents(ctx.tenantId, opts);
|
|
24
21
|
}
|
|
25
22
|
/** The active snapshot plus recent events for `sessionId`, falling back to the snapshot's own session. */
|
|
26
|
-
export function continuityLatest(ctx, opts) {
|
|
27
|
-
const
|
|
28
|
-
const
|
|
29
|
-
|
|
23
|
+
export async function continuityLatest(ctx, opts) {
|
|
24
|
+
const { sessions } = ctx.store;
|
|
25
|
+
const snapshot = await sessions.loadSnapshot(ctx.tenantId, null);
|
|
26
|
+
const events = await sessions.listEvents(ctx.tenantId, {
|
|
27
|
+
sessionId: opts.sessionId || snapshot?.session_id || undefined,
|
|
30
28
|
limit: opts.limit,
|
|
31
29
|
});
|
|
32
30
|
return { snapshot, events };
|
|
33
31
|
}
|
|
34
32
|
/** Stamp the outcome on the caller's handoff for `sessionId`; returns the rows stamped. */
|
|
35
33
|
export function handoffStampOutcome(ctx, sessionId, outcome) {
|
|
36
|
-
return stampHandoffOutcome(ctx.
|
|
34
|
+
return ctx.store.sessions.stampHandoffOutcome(ctx.tenantId, sessionId, outcome);
|
|
37
35
|
}
|
|
38
36
|
/** Save a session handoff in the caller's tenant. */
|
|
39
37
|
export function handoffSave(ctx, handoff) {
|
|
40
|
-
return
|
|
38
|
+
return ctx.store.sessions.saveHandoff(ctx.tenantId, handoff, null);
|
|
41
39
|
}
|
|
42
40
|
/** The caller's latest handoff, optionally for one session. */
|
|
43
41
|
export function handoffLatest(ctx, sessionId) {
|
|
44
|
-
return
|
|
42
|
+
return ctx.store.sessions.latestHandoff(ctx.tenantId, sessionId ?? null, {}, null);
|
|
45
43
|
}
|
|
46
44
|
/** The caller's handoff by id, or null. */
|
|
47
45
|
export function handoffById(ctx, id) {
|
|
48
|
-
return
|
|
46
|
+
return ctx.store.sessions.handoffById(ctx.tenantId, id);
|
|
49
47
|
}
|
|
50
48
|
/** Push a working memory entry in the caller's tenant; returns its row id. */
|
|
51
49
|
export function workingMemoryPush(ctx, opts) {
|
|
52
|
-
return
|
|
50
|
+
return ctx.store.sessions.pushWorkingMemory(ctx.tenantId, opts);
|
|
53
51
|
}
|
|
54
52
|
/** The caller's working memory entries, most important first. */
|
|
55
53
|
export function workingMemoryRead(ctx, opts) {
|
|
56
|
-
return
|
|
54
|
+
return ctx.store.sessions.readWorkingMemory(ctx.tenantId, opts);
|
|
57
55
|
}
|
|
58
56
|
/** Delete the caller's working memory entries; returns the count. */
|
|
59
57
|
export function workingMemoryClear(ctx, opts) {
|
|
60
|
-
return
|
|
58
|
+
return ctx.store.sessions.clearWorkingMemory(ctx.tenantId, opts);
|
|
61
59
|
}
|
|
62
60
|
/** Flush the caller's working memory at session end; returns the count. */
|
|
63
61
|
export function workingMemoryFlush(ctx, opts) {
|
|
64
|
-
return
|
|
62
|
+
return ctx.store.sessions.clearWorkingMemory(ctx.tenantId, opts);
|
|
65
63
|
}
|
|
66
64
|
//# sourceMappingURL=continuity.js.map
|
|
@@ -18,7 +18,9 @@ export interface CorrectionLatencyReport {
|
|
|
18
18
|
maxMs: number | null;
|
|
19
19
|
pairs: CorrectionPair[];
|
|
20
20
|
}
|
|
21
|
-
/**
|
|
21
|
+
/**
|
|
22
|
+
* Correction latency = `new.created` minus the observation time (the extracted-from row's `created`, else
|
|
23
|
+
* `new.created`).
|
|
22
24
|
* Manual supersedes have latency 0 and are excluded from percentiles so they do not mask real lag. */
|
|
23
25
|
export declare function buildCorrectionLatency(entries: MemoryEntry[]): CorrectionLatencyReport;
|
|
24
26
|
//# sourceMappingURL=correction-latency.d.ts.map
|
|
@@ -10,7 +10,9 @@ function percentile(sorted, q) {
|
|
|
10
10
|
return sorted[lo];
|
|
11
11
|
return sorted[lo] + (sorted[hi] - sorted[lo]) * (idx - lo);
|
|
12
12
|
}
|
|
13
|
-
/**
|
|
13
|
+
/**
|
|
14
|
+
* Correction latency = `new.created` minus the observation time (the extracted-from row's `created`, else
|
|
15
|
+
* `new.created`).
|
|
14
16
|
* Manual supersedes have latency 0 and are excluded from percentiles so they do not mask real lag. */
|
|
15
17
|
export function buildCorrectionLatency(entries) {
|
|
16
18
|
const byId = new Map();
|
|
@@ -3,6 +3,9 @@ export interface ApiErrorReply {
|
|
|
3
3
|
status: number;
|
|
4
4
|
message: string;
|
|
5
5
|
}
|
|
6
|
-
/**
|
|
6
|
+
/**
|
|
7
|
+
* Maps by class so rewording a message never moves a status; an untyped error is a 500 whose text stays in the server
|
|
8
|
+
* log.
|
|
9
|
+
*/
|
|
7
10
|
export declare function mapApiError<E>(err: E): ApiErrorReply;
|
|
8
11
|
//# sourceMappingURL=error-reply.d.ts.map
|
package/dist/api/error-reply.js
CHANGED
|
@@ -1,9 +1,18 @@
|
|
|
1
|
-
// The one error-to-reply map the HTTP server and the MCP transports share, so a status never depends on which front end
|
|
1
|
+
// The one error-to-reply map the HTTP server and the MCP transports share, so a status never depends on which front end
|
|
2
|
+
// caught the error.
|
|
2
3
|
import { ApiError } from '../core/api-errors.js';
|
|
3
|
-
import { BodyTimeoutError, BodyTooLargeError, HttpError, INTERNAL_ERROR_MESSAGE, STORE_NOT_PORTED_MESSAGE } from '../util/http-util.js';
|
|
4
|
+
import { BodyTimeoutError, BodyTooLargeError, HttpError, INTERNAL_ERROR_MESSAGE, STORE_NOT_PORTED_MESSAGE, } from '../util/http-util.js';
|
|
4
5
|
import { SqliteBlockedError } from '../util/sqlite-blocked.js';
|
|
5
|
-
|
|
6
|
+
import { STORE_BUSY_MESSAGE } from '../store/port.js';
|
|
7
|
+
import { isStoreBusy } from './busy.js';
|
|
8
|
+
/**
|
|
9
|
+
* Maps by class so rewording a message never moves a status; an untyped error is a 500 whose text stays in the server
|
|
10
|
+
* log.
|
|
11
|
+
*/
|
|
6
12
|
export function mapApiError(err) {
|
|
13
|
+
// A held lock is a retryable 503 in every store, so the surfaces need not know SQLite's busy codes.
|
|
14
|
+
if (isStoreBusy(err))
|
|
15
|
+
return { status: 503, message: STORE_BUSY_MESSAGE };
|
|
7
16
|
// An add-on can build an HttpError from any number, and writeHead throws on one outside 100-999.
|
|
8
17
|
if (err instanceof HttpError && !(Number.isInteger(err.status) && err.status >= 100 && err.status <= 999)) {
|
|
9
18
|
return { status: 500, message: INTERNAL_ERROR_MESSAGE };
|