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/conflicts.js
DELETED
|
@@ -1,61 +0,0 @@
|
|
|
1
|
-
// Conflict resolution for every front end, so the reach, status, pair and liveness checks live in one place.
|
|
2
|
-
// SHORTCUT: hippo.db only, since the store port has no conflict calls; a conflicts group when a served store needs them.
|
|
3
|
-
import { BadRequestError, ConflictError, NotFoundError } from '../core/api-errors.js';
|
|
4
|
-
import { listMemoryConflicts, listTouchableConflicts, resolveConflict } from '../store/conflicts.js';
|
|
5
|
-
import { loadEntriesByIds } from '../store/entry-reads.js';
|
|
6
|
-
import { chunked } from '../util/chunked.js';
|
|
7
|
-
import { passesScopeFilterForRecall, personalScopeOf } from '../core/recall-scope.js';
|
|
8
|
-
import { classifyOriginProject } from '../core/project-identity.js';
|
|
9
|
-
import { isQuarantineScope } from '../trust/quarantine.js';
|
|
10
|
-
import { requireHostAdmin } from './types.js';
|
|
11
|
-
function isLive(entry) {
|
|
12
|
-
return !entry.superseded_by && (entry.kind === 'raw' || entry.kind === 'distilled') && !isQuarantineScope(entry.scope);
|
|
13
|
-
}
|
|
14
|
-
/** Keeps `keepId` and weakens, deletes or rejects the other side of an open conflict in the caller's tenant, auditing as `ctx.actor`.
|
|
15
|
-
* NotFound: missing, untouchable or no longer live. Conflict: already resolved. BadRequest: `keepId` outside the pair. */
|
|
16
|
-
export function resolveMemoryConflict(ctx, conflictId, opts) {
|
|
17
|
-
// Read with every status, so a resolved conflict answers 409 while one holding another person's personal row stays a 404.
|
|
18
|
-
const conflict = listTouchableConflicts(ctx.hippoRoot, '*', ctx.tenantId, ctx.actor).find((c) => c.id === conflictId);
|
|
19
|
-
if (!conflict)
|
|
20
|
-
throw new NotFoundError(`conflict not found: ${conflictId}`);
|
|
21
|
-
if (conflict.status !== 'open')
|
|
22
|
-
throw new ConflictError(`conflict ${conflictId} is already resolved`);
|
|
23
|
-
const pair = [conflict.memory_a_id, conflict.memory_b_id];
|
|
24
|
-
if (!pair.includes(opts.keepId))
|
|
25
|
-
throw new BadRequestError(`keep must be one of the two memories in conflict ${conflictId}: ${pair.join(', ')}`);
|
|
26
|
-
if (loadEntriesByIds(ctx.hippoRoot, pair, ctx.tenantId).filter(isLive).length < pair.length) {
|
|
27
|
-
throw new NotFoundError(`conflict ${conflictId} names a memory that is superseded, archived or quarantined`);
|
|
28
|
-
}
|
|
29
|
-
const resolved = resolveConflict(ctx.hippoRoot, conflictId, opts.keepId, opts.forget === true, ctx.tenantId, {
|
|
30
|
-
rejectLoserValue: opts.rejectLoser === true,
|
|
31
|
-
reason: opts.reason,
|
|
32
|
-
rejectedBy: ctx.actor.subject,
|
|
33
|
-
});
|
|
34
|
-
// Every check passed above, so null here is another resolver getting there first.
|
|
35
|
-
if (resolved === null)
|
|
36
|
-
throw new ConflictError(`conflict ${conflictId} is already resolved`);
|
|
37
|
-
return { conflictId, keptId: opts.keepId, loserId: resolved.loserId };
|
|
38
|
-
}
|
|
39
|
-
/** Open conflicts whose two rows the caller may touch; with `project`, only pairs it could also recall:
|
|
40
|
-
* its repo or user-global, and no scope it was not asked for. */
|
|
41
|
-
export function listOpenConflicts(ctx, project) {
|
|
42
|
-
const touchable = listTouchableConflicts(ctx.hippoRoot, 'open', ctx.tenantId, ctx.actor);
|
|
43
|
-
if (!project)
|
|
44
|
-
return touchable;
|
|
45
|
-
const own = personalScopeOf(ctx.actor);
|
|
46
|
-
const ids = [...new Set(touchable.flatMap((c) => [c.memory_a_id, c.memory_b_id]))];
|
|
47
|
-
// loadEntriesByIds reads at most one chunk of ids per call.
|
|
48
|
-
const rows = new Map(chunked(ids).flatMap((chunk) => loadEntriesByIds(ctx.hippoRoot, chunk, ctx.tenantId)).map((row) => [row.id, row]));
|
|
49
|
-
const shown = (id) => {
|
|
50
|
-
const row = rows.get(id);
|
|
51
|
-
return row !== undefined && classifyOriginProject(row.origin_project, project) !== 'cross-project'
|
|
52
|
-
&& passesScopeFilterForRecall(row.scope ?? null, undefined, own);
|
|
53
|
-
};
|
|
54
|
-
return touchable.filter((c) => shown(c.memory_a_id) && shown(c.memory_b_id));
|
|
55
|
-
}
|
|
56
|
-
/** Conflicts with `status` ('*' for any) in reach, with no scope filter: the host's own view, so the host admin only. */
|
|
57
|
-
export function listConflicts(ctx, status, reach = {}) {
|
|
58
|
-
requireHostAdmin(ctx, 'Listing conflicts past the scope check');
|
|
59
|
-
return listMemoryConflicts(ctx.hippoRoot, status, reach.everyTenant ? undefined : ctx.tenantId);
|
|
60
|
-
}
|
|
61
|
-
//# sourceMappingURL=conflicts.js.map
|
package/dist/api/dormant.d.ts
DELETED
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
import { type DormantMemory, type ListDormantOpts } from '../store/dormant.js';
|
|
2
|
-
import { type MemoryEntry } from '../core/memory.js';
|
|
3
|
-
import type { Context } from './types.js';
|
|
4
|
-
/** A tenant's dormant memories (src/store/dormant.ts): what sleep moved out of active memory when `dormant.enabled` is on. Newest first;
|
|
5
|
-
* `opts.query` keeps rows containing every term (case-insensitive). */
|
|
6
|
-
export declare function listDormant(ctx: Context, opts?: ListDormantOpts): DormantMemory[];
|
|
7
|
-
/** Restores a dormant memory as if just recalled, with a full half-life; a row set aside by audit repair returns `verified`.
|
|
8
|
-
* Throws if the tenant has no such dormant id or a live memory holds it, and RejectedValueError if the value was since rejected (the dormant copy stays). */
|
|
9
|
-
export declare function restoreDormant(ctx: Context, id: string): MemoryEntry;
|
|
10
|
-
/** Permanently deletes a dormant memory, the explicit "forget it for good"; throws when the tenant has no dormant memory with that id. */
|
|
11
|
-
export declare function forgetDormant(ctx: Context, id: string): void;
|
|
12
|
-
/** Whether the tenant holds a dormant memory with this id that the caller may touch (for "not found" hints). */
|
|
13
|
-
export declare function isDormant(ctx: Context, id: string): boolean;
|
|
14
|
-
//# sourceMappingURL=dormant.d.ts.map
|
package/dist/api/dormant.js
DELETED
|
@@ -1,58 +0,0 @@
|
|
|
1
|
-
// Dormant memories: list, restore, forget and check.
|
|
2
|
-
import { ConflictError, NotFoundError } from '../core/api-errors.js';
|
|
3
|
-
import { stampOriginProject } from '../store/entry-row.js';
|
|
4
|
-
import { updateStatsUnlessBusy } from '../store/index-and-stats.js';
|
|
5
|
-
import { loadDormantMemories, holdsDormantMemory, restoreDormantMemory, forgetDormantMemory, } from '../store/dormant.js';
|
|
6
|
-
import { strengthAblation } from '../core/ablation.js';
|
|
7
|
-
import { createMemory, calculateStrength } from '../core/memory.js';
|
|
8
|
-
import { loadConfig } from '../core/config.js';
|
|
9
|
-
import { canTouchScope, personalScopeOf } from '../core/recall-scope.js';
|
|
10
|
-
import { touchableScopeSql } from '../store/rule-sql.js';
|
|
11
|
-
const touchable = (ctx) => touchableScopeSql('', personalScopeOf(ctx.actor));
|
|
12
|
-
/** A tenant's dormant memories (src/store/dormant.ts): what sleep moved out of active memory when `dormant.enabled` is on. Newest first;
|
|
13
|
-
* `opts.query` keeps rows containing every term (case-insensitive). */
|
|
14
|
-
export function listDormant(ctx, opts = {}) {
|
|
15
|
-
return loadDormantMemories(ctx.hippoRoot, ctx.tenantId, opts, touchable(ctx));
|
|
16
|
-
}
|
|
17
|
-
/** Restores a dormant memory as if just recalled, with a full half-life; a row set aside by audit repair returns `verified`.
|
|
18
|
-
* Throws if the tenant has no such dormant id or a live memory holds it, and RejectedValueError if the value was since rejected (the dormant copy stays). */
|
|
19
|
-
export function restoreDormant(ctx, id) {
|
|
20
|
-
const outcome = restoreDormantMemory(ctx.hippoRoot, {
|
|
21
|
-
tenantId: ctx.tenantId,
|
|
22
|
-
id,
|
|
23
|
-
actor: ctx.actor.subject,
|
|
24
|
-
inReach: (scope) => canTouchScope(ctx.actor, scope),
|
|
25
|
-
revive: (snapshot, now) => reviveSnapshot(ctx, snapshot, now),
|
|
26
|
-
});
|
|
27
|
-
if (outcome.status === 'missing')
|
|
28
|
-
throw new NotFoundError(`dormant memory not found: ${id}`);
|
|
29
|
-
if (outcome.status === 'active') {
|
|
30
|
-
throw new ConflictError(`memory ${id} is already active; forget it before restoring its dormant copy`);
|
|
31
|
-
}
|
|
32
|
-
return outcome.entry;
|
|
33
|
-
}
|
|
34
|
-
function reviveSnapshot(ctx, dormant, now) {
|
|
35
|
-
// A snapshot can predate a field added later: createMemory supplies defaults, then the snapshot overrides every field it carries.
|
|
36
|
-
// The placeholder content only meets createMemory's minimum length, so a legacy row under 3 chars still restores.
|
|
37
|
-
const revived = {
|
|
38
|
-
...createMemory('dormant snapshot defaults', { baseHalfLifeDays: loadConfig(ctx.hippoRoot).defaultHalfLifeDays }),
|
|
39
|
-
...dormant.entry,
|
|
40
|
-
last_retrieved: now.toISOString(),
|
|
41
|
-
};
|
|
42
|
-
if (dormant.reason === 'quality-repair')
|
|
43
|
-
revived.confidence = 'verified';
|
|
44
|
-
return stampOriginProject(ctx.hippoRoot, { ...revived, strength: calculateStrength(revived, now, { ablation: strengthAblation() }) });
|
|
45
|
-
}
|
|
46
|
-
/** Permanently deletes a dormant memory, the explicit "forget it for good"; throws when the tenant has no dormant memory with that id. */
|
|
47
|
-
export function forgetDormant(ctx, id) {
|
|
48
|
-
const forgotten = forgetDormantMemory(ctx.hippoRoot, { tenantId: ctx.tenantId, id, actor: ctx.actor.subject, admit: touchable(ctx) });
|
|
49
|
-
if (!forgotten)
|
|
50
|
-
throw new NotFoundError(`dormant memory not found: ${id}`);
|
|
51
|
-
// Counted like every other permanent removal (forget, archiveRaw).
|
|
52
|
-
updateStatsUnlessBusy(ctx.hippoRoot, { forgotten: 1 }, `removed ${id}`);
|
|
53
|
-
}
|
|
54
|
-
/** Whether the tenant holds a dormant memory with this id that the caller may touch (for "not found" hints). */
|
|
55
|
-
export function isDormant(ctx, id) {
|
|
56
|
-
return holdsDormantMemory(ctx.hippoRoot, ctx.tenantId, id, touchable(ctx));
|
|
57
|
-
}
|
|
58
|
-
//# sourceMappingURL=dormant.js.map
|
package/dist/api/goals.d.ts
DELETED
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import { type CompleteGoalOpts, type Goal, type PushGoalOpts } from '../store/goals.js';
|
|
2
|
-
import { type Context } from './types.js';
|
|
3
|
-
/** What a new goal carries; its tenant is always the caller's. */
|
|
4
|
-
export type GoalPushOpts = Omit<PushGoalOpts, 'tenantId'>;
|
|
5
|
-
/** Push a goal onto `sessionId`'s stack in the caller's tenant. */
|
|
6
|
-
export declare function goalPush(ctx: Context, opts: GoalPushOpts): Goal;
|
|
7
|
-
/** The caller's goals for `sessionId`: active ones, or every status when `all` is set. */
|
|
8
|
-
export declare function goalList(ctx: Context, opts: {
|
|
9
|
-
sessionId: string;
|
|
10
|
-
all: boolean;
|
|
11
|
-
}): Goal[];
|
|
12
|
-
/** Complete a goal by id; a no-op for an unknown or already completed goal. Host admin only. */
|
|
13
|
-
export declare function goalComplete(ctx: Context, goalId: string, opts: CompleteGoalOpts): void;
|
|
14
|
-
/** Suspend an active goal by id. Host admin only. */
|
|
15
|
-
export declare function goalSuspend(ctx: Context, goalId: string): void;
|
|
16
|
-
/** Resume a suspended goal by id, suspending the oldest active one past the depth cap. Host admin only. */
|
|
17
|
-
export declare function goalResume(ctx: Context, goalId: string): void;
|
|
18
|
-
//# sourceMappingURL=goals.d.ts.map
|
package/dist/api/graph.d.ts
DELETED
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import type { GraphRows } from '../store/port.js';
|
|
2
|
-
import type { Context } from './types.js';
|
|
3
|
-
/** The entity/relation rows behind GET /v1/graph, as the caller's role, scopes and owner may see them. */
|
|
4
|
-
export declare function graphRows(ctx: Context, query: {
|
|
5
|
-
entity?: string;
|
|
6
|
-
limit: number;
|
|
7
|
-
}): Promise<GraphRows>;
|
|
8
|
-
//# sourceMappingURL=graph.d.ts.map
|
package/dist/api/graph.js
DELETED
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import { requireGroup, storeFor } from '../store/index.js';
|
|
2
|
-
/** The entity/relation rows behind GET /v1/graph, as the caller's role, scopes and owner may see them. */
|
|
3
|
-
export async function graphRows(ctx, query) {
|
|
4
|
-
const { role, scopes, owner } = ctx.actor;
|
|
5
|
-
return requireGroup(storeFor(ctx), 'graphReads').graphRows(ctx.tenantId, { ...query, reader: { role, scopes, owner } });
|
|
6
|
-
}
|
|
7
|
-
//# sourceMappingURL=graph.js.map
|
package/dist/api/learn.js
DELETED
|
@@ -1,124 +0,0 @@
|
|
|
1
|
-
// Git auto-learn: fix/revert/bug commit subjects become memories. `hippo learn`, init, sleep and MCP hippo_learn share it.
|
|
2
|
-
import { ForbiddenError } from '../core/api-errors.js';
|
|
3
|
-
import { fetchGitLog, extractLessons, partitionLessons, isGitRepo } from '../learn/autolearn.js';
|
|
4
|
-
import { loadConfig } from '../core/config.js';
|
|
5
|
-
import { withRequestStoresSync } from '../db/request-stores.js';
|
|
6
|
-
import { embedMemory } from '../search/embed-memories.js';
|
|
7
|
-
import { extractInvalidationTarget, invalidateMatching, invalidateMatchingAmong, } from '../learn/invalidation.js';
|
|
8
|
-
import { createMemory, Layer, schemaFitFrom, schemaFitSourceOf } from '../core/memory.js';
|
|
9
|
-
import { extractPathTags } from '../search/path-context.js';
|
|
10
|
-
import { canReadScope, personalScopeOf } from '../core/recall-scope.js';
|
|
11
|
-
import { touchableScopeSql } from '../store/rule-sql.js';
|
|
12
|
-
import { duplicateKey, longestWord, storedTextKeys } from '../util/same-text.js';
|
|
13
|
-
import { loadTextsHoldingWords } from '../store/candidates.js';
|
|
14
|
-
import { loadAllEntries } from '../store/entry-reads.js';
|
|
15
|
-
import { writeEntriesSkippingRejected } from '../store/entry-writes.js';
|
|
16
|
-
import { updateStats } from '../store/index-and-stats.js';
|
|
17
|
-
// SHORTCUT: two profiles keep each surface's rows as they were; fold MCP onto the CLI profile once it may invalidate.
|
|
18
|
-
export const CLI_LEARN = Object.freeze({ tags: Object.freeze(['error', 'git-learned']), source: 'git-learn', full: true });
|
|
19
|
-
export const MCP_LEARN = Object.freeze({ tags: Object.freeze(['git-learned']), source: 'git', full: false });
|
|
20
|
-
/** Learn from `repoPath`'s last `days` of commits into the caller's tenant. Host admin only. */
|
|
21
|
-
export function learn(ctx, opts) {
|
|
22
|
-
// It reads the host's own git history, which belongs to the host, not to the caller's tenant.
|
|
23
|
-
if (!ctx.actor.hostAdmin)
|
|
24
|
-
throw new ForbiddenError('hippo_learn requires a host admin');
|
|
25
|
-
const none = { added: 0, skipped: 0, rejected: 0, lowInfo: 0, invalidations: [] };
|
|
26
|
-
if (!isGitRepo(opts.repoPath))
|
|
27
|
-
return { status: 'not-a-repo', ...none };
|
|
28
|
-
const gitLog = fetchGitLog(opts.repoPath, opts.days);
|
|
29
|
-
if (!gitLog.trim())
|
|
30
|
-
return { status: 'no-commits', ...none };
|
|
31
|
-
const config = loadConfig(ctx.hippoRoot);
|
|
32
|
-
const parsed = extractLessons(gitLog, config.gitLearnPatterns);
|
|
33
|
-
if (parsed.length === 0)
|
|
34
|
-
return { status: 'no-lessons', ...none };
|
|
35
|
-
// The gate filters the loop input, so a dropped lesson neither stores nor invalidates; docs/decisions git-learn-gate-placement says why.
|
|
36
|
-
const { kept, dropped } = partitionLessons(parsed);
|
|
37
|
-
return { status: 'scanned', lowInfo: dropped.length, ...writeLessons(ctx, kept, opts, config) };
|
|
38
|
-
}
|
|
39
|
-
/** Writes `batch` in one transaction; a refused lesson is dropped from `live` and `keys` and must not abort the rest of the git-log scan. */
|
|
40
|
-
function landLessons(ctx, batch, live, keys, counts, full) {
|
|
41
|
-
if (batch.length === 0)
|
|
42
|
-
return;
|
|
43
|
-
// SHORTCUT: hippo.db only, as the port has no batch write, stats bump or whole-tenant read, so another store kind answers 501 at the
|
|
44
|
-
// open; port groups for them once a served store must learn.
|
|
45
|
-
const landed = [];
|
|
46
|
-
writeEntriesSkippingRejected(ctx.hippoRoot, (put) => {
|
|
47
|
-
for (const { entry, key } of batch) {
|
|
48
|
-
if (put(entry)) {
|
|
49
|
-
landed.push(entry);
|
|
50
|
-
continue;
|
|
51
|
-
}
|
|
52
|
-
counts.rejected++;
|
|
53
|
-
keys.delete(key);
|
|
54
|
-
const at = live.indexOf(entry);
|
|
55
|
-
if (at !== -1)
|
|
56
|
-
live.splice(at, 1);
|
|
57
|
-
}
|
|
58
|
-
}, ctx.actor.subject);
|
|
59
|
-
counts.added += landed.length;
|
|
60
|
-
if (!full)
|
|
61
|
-
return;
|
|
62
|
-
if (landed.length > 0)
|
|
63
|
-
updateStats(ctx.hippoRoot, { remembered: landed.length });
|
|
64
|
-
for (const entry of landed)
|
|
65
|
-
void embedMemory(ctx.hippoRoot, entry);
|
|
66
|
-
}
|
|
67
|
-
function writeLessons(ctx, lessons, opts, config) {
|
|
68
|
-
const { hippoRoot, tenantId } = ctx;
|
|
69
|
-
const { profile } = opts;
|
|
70
|
-
// `hippo init` calls this outside any request, so the batch brings its own scope: every read and write below shares one handle.
|
|
71
|
-
return withRequestStoresSync(() => {
|
|
72
|
-
// One read serves the batch: invalidation matches against `live`, which follows every write below, as a reload per lesson did.
|
|
73
|
-
const live = profile.full ? loadAllEntries(hippoRoot, tenantId) : [];
|
|
74
|
-
// Schema fit needs every row; without it, only rows holding a lesson's longest word can be its copy. Learn is host-admin only, so
|
|
75
|
-
// both read what an admin can.
|
|
76
|
-
const existing = profile.full ? live.filter((e) => e.scope == null || canReadScope(ctx.actor, e.scope)) : undefined;
|
|
77
|
-
// Each lesson is scored against `existing` as it was before the batch, so its tag counts and texts are read once.
|
|
78
|
-
const fitSource = existing && schemaFitSourceOf(existing);
|
|
79
|
-
const readable = touchableScopeSql('', personalScopeOf(ctx.actor));
|
|
80
|
-
const keys = storedTextKeys(existing ?? loadTextsHoldingWords(hippoRoot, tenantId, lessons.map(longestWord), undefined, readable));
|
|
81
|
-
const pathTags = profile.full ? extractPathTags(opts.repoPath) : [];
|
|
82
|
-
const counts = { added: 0, skipped: 0, rejected: 0, invalidations: [] };
|
|
83
|
-
// Lessons queue and land in one transaction; an invalidation reads the store, so it flushes the queue first.
|
|
84
|
-
const queue = [];
|
|
85
|
-
const flush = () => landLessons(ctx, queue.splice(0), live, keys, counts, profile.full);
|
|
86
|
-
for (const lesson of lessons) {
|
|
87
|
-
const key = duplicateKey(lesson);
|
|
88
|
-
if (keys.has(key)) {
|
|
89
|
-
counts.skipped++;
|
|
90
|
-
continue;
|
|
91
|
-
}
|
|
92
|
-
const target = profile.full ? extractInvalidationTarget(lesson) : null;
|
|
93
|
-
if (target) {
|
|
94
|
-
flush();
|
|
95
|
-
const { invalidated } = invalidateMatchingAmong(hippoRoot, live, target, tenantId);
|
|
96
|
-
if (invalidated > 0)
|
|
97
|
-
counts.invalidations.push({ from: target.from, count: invalidated });
|
|
98
|
-
}
|
|
99
|
-
const entry = createMemory(lesson, {
|
|
100
|
-
layer: Layer.Episodic,
|
|
101
|
-
tags: [...profile.tags],
|
|
102
|
-
source: profile.source,
|
|
103
|
-
confidence: 'observed',
|
|
104
|
-
schema_fit: fitSource && schemaFitFrom(lesson, [...profile.tags], fitSource),
|
|
105
|
-
tenantId,
|
|
106
|
-
baseHalfLifeDays: config.defaultHalfLifeDays,
|
|
107
|
-
});
|
|
108
|
-
for (const tag of pathTags)
|
|
109
|
-
if (!entry.tags.includes(tag))
|
|
110
|
-
entry.tags.push(tag);
|
|
111
|
-
queue.push({ entry, key });
|
|
112
|
-
if (profile.full)
|
|
113
|
-
live.push(entry);
|
|
114
|
-
keys.add(key);
|
|
115
|
-
}
|
|
116
|
-
flush();
|
|
117
|
-
return counts;
|
|
118
|
-
});
|
|
119
|
-
}
|
|
120
|
-
/** `hippo invalidate`: weakens the caller's tenant's memories that reference `target.from`, or only the one `options.onlyId` names. */
|
|
121
|
-
export function invalidateMemories(ctx, target, options) {
|
|
122
|
-
return invalidateMatching(ctx.hippoRoot, target, ctx.tenantId, options);
|
|
123
|
-
}
|
|
124
|
-
//# sourceMappingURL=learn.js.map
|
package/dist/api/memories.d.ts
DELETED
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
import type { MemoryEntry } from '../core/memory.js';
|
|
2
|
-
import { type StrengthTallies } from '../store/candidates.js';
|
|
3
|
-
import { type Context } from './types.js';
|
|
4
|
-
/** The row `id` in the caller's tenant, or null when it is missing or another tenant's. */
|
|
5
|
-
export declare function getMemory(ctx: Context, id: string): Promise<MemoryEntry | null>;
|
|
6
|
-
/** getMemory, but NotFound when the row is another person's personal one, so the reply does not reveal that the id exists. */
|
|
7
|
-
export declare function getTouchableMemory(ctx: Context, id: string): Promise<MemoryEntry | null>;
|
|
8
|
-
export interface MemoryStatus extends StrengthTallies {
|
|
9
|
-
openConflicts: number;
|
|
10
|
-
}
|
|
11
|
-
/** Tenant-wide counts behind the status verbs: strength tallies at `now` (at risk is under `atRiskBelow`) and open conflicts. */
|
|
12
|
-
export declare function getMemoryStatus(ctx: Context, now: Date, atRiskBelow: number): MemoryStatus;
|
|
13
|
-
/** Which rows a read covers: the caller's tenant, or with `everyTenant` the whole store. */
|
|
14
|
-
export interface TenantReach {
|
|
15
|
-
everyTenant?: boolean;
|
|
16
|
-
}
|
|
17
|
-
/** Every memory row in reach, oldest first. */
|
|
18
|
-
export declare function listMemories(ctx: Context, reach?: TenantReach): MemoryEntry[];
|
|
19
|
-
/** How many memory rows the whole store holds, counted in SQL. */
|
|
20
|
-
export declare function countAllMemories(ctx: Context): number;
|
|
21
|
-
/** The rows in reach among `ids`; a missing id or one out of reach is absent. */
|
|
22
|
-
export declare function listMemoriesByIds(ctx: Context, ids: readonly string[], reach?: TenantReach): MemoryEntry[];
|
|
23
|
-
//# sourceMappingURL=memories.d.ts.map
|
package/dist/api/memories.js
DELETED
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
import { loadStrengthTallies } from '../store/candidates.js';
|
|
2
|
-
import { countOpenConflicts } from '../store/conflicts.js';
|
|
3
|
-
import { NotFoundError } from '../core/api-errors.js';
|
|
4
|
-
import { canTouchScope } from '../core/recall-scope.js';
|
|
5
|
-
import { storeFor } from '../store/index.js';
|
|
6
|
-
import { countAllEntries, loadAllEntries, loadEntriesByIds } from '../store/entry-reads.js';
|
|
7
|
-
import { requireHostAdmin } from './types.js';
|
|
8
|
-
/** The row `id` in the caller's tenant, or null when it is missing or another tenant's. */
|
|
9
|
-
export async function getMemory(ctx, id) {
|
|
10
|
-
const [entry] = await storeFor(ctx).entriesByIds([id], ctx.tenantId);
|
|
11
|
-
return entry ?? null;
|
|
12
|
-
}
|
|
13
|
-
/** getMemory, but NotFound when the row is another person's personal one, so the reply does not reveal that the id exists. */
|
|
14
|
-
export async function getTouchableMemory(ctx, id) {
|
|
15
|
-
const entry = await getMemory(ctx, id);
|
|
16
|
-
if (!canTouchScope(ctx.actor, entry?.scope ?? null))
|
|
17
|
-
throw new NotFoundError(`Memory not found: ${id}`);
|
|
18
|
-
return entry;
|
|
19
|
-
}
|
|
20
|
-
/** Tenant-wide counts behind the status verbs: strength tallies at `now` (at risk is under `atRiskBelow`) and open conflicts. */
|
|
21
|
-
export function getMemoryStatus(ctx, now, atRiskBelow) {
|
|
22
|
-
return {
|
|
23
|
-
...loadStrengthTallies(ctx.hippoRoot, ctx.tenantId, now, atRiskBelow),
|
|
24
|
-
openConflicts: countOpenConflicts(ctx.hippoRoot, ctx.tenantId),
|
|
25
|
-
};
|
|
26
|
-
}
|
|
27
|
-
function tenantFilter(ctx, reach) {
|
|
28
|
-
if (!reach.everyTenant)
|
|
29
|
-
return ctx.tenantId;
|
|
30
|
-
requireHostAdmin(ctx, 'Reading every tenant');
|
|
31
|
-
return undefined;
|
|
32
|
-
}
|
|
33
|
-
/** Every memory row in reach, oldest first. */
|
|
34
|
-
export function listMemories(ctx, reach = {}) {
|
|
35
|
-
return loadAllEntries(ctx.hippoRoot, tenantFilter(ctx, reach));
|
|
36
|
-
}
|
|
37
|
-
/** How many memory rows the whole store holds, counted in SQL. */
|
|
38
|
-
export function countAllMemories(ctx) {
|
|
39
|
-
requireHostAdmin(ctx, 'Reading every tenant');
|
|
40
|
-
return countAllEntries(ctx.hippoRoot);
|
|
41
|
-
}
|
|
42
|
-
/** The rows in reach among `ids`; a missing id or one out of reach is absent. */
|
|
43
|
-
export function listMemoriesByIds(ctx, ids, reach = {}) {
|
|
44
|
-
return loadEntriesByIds(ctx.hippoRoot, ids, tenantFilter(ctx, reach));
|
|
45
|
-
}
|
|
46
|
-
//# sourceMappingURL=memories.js.map
|
package/dist/api/objects.d.ts
DELETED
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import type { SavableDescriptor } from '../objects/descriptor.js';
|
|
2
|
-
import type { ObjectByKind, SavableKind } from '../core/object-types.js';
|
|
3
|
-
import type { Objects } from '../store/port.js';
|
|
4
|
-
import type { Context } from './types.js';
|
|
5
|
-
/** The request store's object group; the dispatcher has already answered 501 for a store without it. */
|
|
6
|
-
export declare function objectsOf(ctx: Context): Objects;
|
|
7
|
-
/** Saves through the request's store as the authenticated caller. */
|
|
8
|
-
export declare function saveFor<K extends SavableKind, W>(ctx: Context, d: SavableDescriptor<K, W>, write: W): Promise<ObjectByKind[K]>;
|
|
9
|
-
//# sourceMappingURL=objects.d.ts.map
|
package/dist/api/on-store.d.ts
DELETED
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import type { HippoStore, StoreGroups } from '../store/port.js';
|
|
2
|
-
import { type SqliteLocal } from '../store/sqlite/local.js';
|
|
3
|
-
import { type SqliteSyncStore } from '../store/sqlite/store.js';
|
|
4
|
-
import type { Context, StoreReply } from './types.js';
|
|
5
|
-
/** What a port call answers: a Promise from a served store, the value itself from hippo.db. */
|
|
6
|
-
export type Reply<T> = T | Promise<T>;
|
|
7
|
-
/** The port one body is written against: a served store, or hippo.db answering the same methods at once. */
|
|
8
|
-
export type StorePort = HippoStore | SqliteSyncStore;
|
|
9
|
-
/** `next` on the reply's value, at once for a value, so hippo.db's path never becomes a Promise. */
|
|
10
|
-
export declare function andThen<T, U>(reply: Reply<T>, next: (value: T) => Reply<U>): Reply<U>;
|
|
11
|
-
/** Stands in for a group the store lacks, as `port.keyAudit ?? notPorted(port, 'keyAudit')`; it answers 501 as any unported path does. */
|
|
12
|
-
export declare function notPorted(port: StorePort, group: keyof StoreGroups): never;
|
|
13
|
-
/** Runs `run` on `ctx.store`, where a throw rejects, else on hippo.db under `ctx.hippoRoot`, where it throws. The store path never reads `hippoRoot`.
|
|
14
|
-
* `local` runs what needs hippo.db's own handle or meta table; a served store refuses it, or does without where the write allows. */
|
|
15
|
-
export declare function onStore<C extends Context, R>(ctx: C, run: (port: StorePort, local: SqliteLocal) => Reply<R>): StoreReply<C, R>;
|
|
16
|
-
//# sourceMappingURL=on-store.d.ts.map
|
package/dist/api/on-store.js
DELETED
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
// The one place an api function picks between a served store and hippo.db, so each operation has one body.
|
|
2
|
-
// Only functions published as StoreReply use this carrier (see "Sync core, async port" in docs/ARCHITECTURE.md);
|
|
3
|
-
// a new operation is async and goes through storeFor(ctx).
|
|
4
|
-
import { SqliteBlockedError, StoreNotPortedError } from '../util/sqlite-blocked.js';
|
|
5
|
-
import { REFUSED_ON_A_STORE, sqliteLocal } from '../store/sqlite/local.js';
|
|
6
|
-
import { sqliteSyncStore } from '../store/sqlite/store.js';
|
|
7
|
-
/** `next` on the reply's value, at once for a value, so hippo.db's path never becomes a Promise. */
|
|
8
|
-
export function andThen(reply, next) {
|
|
9
|
-
return reply instanceof Promise ? reply.then(next) : next(reply);
|
|
10
|
-
}
|
|
11
|
-
/** Stands in for a group the store lacks, as `port.keyAudit ?? notPorted(port, 'keyAudit')`; it answers 501 as any unported path does. */
|
|
12
|
-
export function notPorted(port, group) {
|
|
13
|
-
throw new StoreNotPortedError(port.kind, group);
|
|
14
|
-
}
|
|
15
|
-
/** A served store's stand-in for SqliteLocal. The last recall sits in hippo.db's
|
|
16
|
-
* meta table, so only a store that is hippo.db keeps and reads it, on `hippoRoot`. */
|
|
17
|
-
function servedLocal(store, hippoRoot) {
|
|
18
|
-
if (store.kind === 'sqlite')
|
|
19
|
-
return { ...sqliteLocal(hippoRoot), ...REFUSED_ON_A_STORE };
|
|
20
|
-
return {
|
|
21
|
-
...REFUSED_ON_A_STORE,
|
|
22
|
-
applyOutcomeToLastRecall() {
|
|
23
|
-
throw new SqliteBlockedError(store.kind);
|
|
24
|
-
},
|
|
25
|
-
finishLastRecall: (writes) => store.finishRecall(writes).then(() => null),
|
|
26
|
-
};
|
|
27
|
-
}
|
|
28
|
-
/** Runs `run` on `ctx.store`, where a throw rejects, else on hippo.db under `ctx.hippoRoot`, where it throws. The store path never reads `hippoRoot`.
|
|
29
|
-
* `local` runs what needs hippo.db's own handle or meta table; a served store refuses it, or does without where the write allows. */
|
|
30
|
-
export function onStore(ctx, run) {
|
|
31
|
-
const { store } = ctx;
|
|
32
|
-
// No await before `run`: an add-on relies on the first port call starting inside this call.
|
|
33
|
-
const reply = store ? (async () => run(store, servedLocal(store, ctx.hippoRoot)))() : run(sqliteSyncStore(ctx.hippoRoot), sqliteLocal(ctx.hippoRoot));
|
|
34
|
-
// SAFETY: the store path is an async function's Promise and hippo.db's port calls answer
|
|
35
|
-
// values, so the Promise comes back exactly when ctx has a store, as StoreReply says.
|
|
36
|
-
return reply;
|
|
37
|
-
}
|
|
38
|
-
//# sourceMappingURL=on-store.js.map
|
package/dist/api/outcome.d.ts
DELETED
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import type { Context, StoreReply } from './types.js';
|
|
2
|
-
/** An id outside ctx.tenantId, or in someone else's personal scope, is skipped, so a stale id never fails the call.
|
|
3
|
-
* `appliedIds` holds only the ids applied: a caller that answers across tenants returns it, never the ids it was sent. */
|
|
4
|
-
export interface OutcomeResult {
|
|
5
|
-
applied: number;
|
|
6
|
-
appliedIds: string[];
|
|
7
|
-
}
|
|
8
|
-
/** `opts.traceId` links the outcome to the recall trace it judges. Only outcomeForLastRecall sends one: explicit ids may follow no recall at all. */
|
|
9
|
-
export declare function outcome<C extends Context>(ctx: C, ids: ReadonlyArray<string>, good: boolean, opts?: {
|
|
10
|
-
traceId?: number;
|
|
11
|
-
}): StoreReply<C, OutcomeResult>;
|
|
12
|
-
/** The last recall's ids and its trace sit in hippo.db's meta table, which only the CLI and context write, so a store of another kind is refused.
|
|
13
|
-
* `ids` holds only the ids applied in ctx.tenantId: the index is not tenant-scoped, so the ids read from it are never returned. */
|
|
14
|
-
export interface OutcomeForLastRecallResult {
|
|
15
|
-
applied: number;
|
|
16
|
-
ids: string[];
|
|
17
|
-
}
|
|
18
|
-
export declare function outcomeForLastRecall<C extends Context>(ctx: C, good: boolean): StoreReply<C, OutcomeForLastRecallResult>;
|
|
19
|
-
//# sourceMappingURL=outcome.d.ts.map
|
package/dist/api/outcome.js
DELETED
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
// Outcome feedback on recalled memories.
|
|
2
|
-
import { personalScopeOf } from '../core/recall-scope.js';
|
|
3
|
-
import { andThen, notPorted, onStore } from './on-store.js';
|
|
4
|
-
/** `opts.traceId` links the outcome to the recall trace it judges. Only outcomeForLastRecall sends one: explicit ids may follow no recall at all. */
|
|
5
|
-
export function outcome(ctx, ids, good, opts) {
|
|
6
|
-
return onStore(ctx, (port, local) => {
|
|
7
|
-
const entryWrites = port.entryWrites ?? notPorted(port, 'entryWrites');
|
|
8
|
-
const write = { tenantId: ctx.tenantId, actor: ctx.actor.subject, ownScope: personalScopeOf(ctx.actor), ids, good };
|
|
9
|
-
const traceId = opts?.traceId;
|
|
10
|
-
// The trace link is written on hippo.db's own handle after the commit, so a served store refuses a traceId.
|
|
11
|
-
const applied = traceId === undefined ? entryWrites.applyOutcome(write) : local.applyOutcome(write, traceId);
|
|
12
|
-
return andThen(applied, (appliedIds) => ({ applied: appliedIds.length, appliedIds }));
|
|
13
|
-
});
|
|
14
|
-
}
|
|
15
|
-
export function outcomeForLastRecall(ctx, good) {
|
|
16
|
-
return onStore(ctx, (_port, local) => {
|
|
17
|
-
const ids = local.applyOutcomeToLastRecall({ tenantId: ctx.tenantId, actor: ctx.actor.subject, ownScope: personalScopeOf(ctx.actor) }, good);
|
|
18
|
-
return { applied: ids.length, ids };
|
|
19
|
-
});
|
|
20
|
-
}
|
|
21
|
-
//# sourceMappingURL=outcome.js.map
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import { type Prediction, type PredictionBaserate, type SavePredictionOpts } from '../store/predictions.js';
|
|
2
|
-
import type { PredictionClose, PredictionSave, Predictions } from '../store/port.js';
|
|
3
|
-
import type { Context } from './types.js';
|
|
4
|
-
export declare function savePrediction(ctx: Context, input: PredictionSave): Promise<Prediction>;
|
|
5
|
-
/** A claim saved with its recall mirror, built under the store root's half-life as the HTTP create route builds it. */
|
|
6
|
-
export declare function recordPrediction(ctx: Context, claim: SavePredictionOpts): Promise<Prediction>;
|
|
7
|
-
export declare function listPredictions(ctx: Context, query: Parameters<Predictions['listPredictions']>[1]): Promise<Prediction[]>;
|
|
8
|
-
export declare function predictionBaserate(ctx: Context, classTag: string): Promise<PredictionBaserate>;
|
|
9
|
-
export declare function predictionById(ctx: Context, id: number): Promise<Prediction | null>;
|
|
10
|
-
export declare function closePrediction(ctx: Context, id: number, close: PredictionClose): Promise<Prediction>;
|
|
11
|
-
//# sourceMappingURL=predictions.d.ts.map
|
package/dist/api/promote.d.ts
DELETED
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
import type { ConnectorEvent } from '../store/port.js';
|
|
2
|
-
import { type Layer } from '../core/memory.js';
|
|
3
|
-
import type { Context, StoreReply } from './types.js';
|
|
4
|
-
/** Copies a local memory into the global store; the inner writeEntry emits 'remember' there, and we add a 'promote' audit event so intent stays distinct.
|
|
5
|
-
* promoteToGlobal reads via `readEntry` with no tenant filter and keeps the entry's existing tenantId on the global side. */
|
|
6
|
-
export interface PromoteResult {
|
|
7
|
-
ok: true;
|
|
8
|
-
sourceId: string;
|
|
9
|
-
globalId: string;
|
|
10
|
-
}
|
|
11
|
-
export declare function promote(ctx: Context, id: string): PromoteResult;
|
|
12
|
-
/** Replace an old memory with new content, chaining old.superseded_by = new.id; the store commits both rows and the audit row together. */
|
|
13
|
-
export interface SupersedeResult {
|
|
14
|
-
ok: true;
|
|
15
|
-
oldId: string;
|
|
16
|
-
newId: string;
|
|
17
|
-
}
|
|
18
|
-
/** What the successor takes instead of the old row's value. Never set from a request body: the CLI fills it from its flags. */
|
|
19
|
-
export interface SupersedeOverrides {
|
|
20
|
-
layer?: Layer;
|
|
21
|
-
tags?: string[];
|
|
22
|
-
pinned?: boolean;
|
|
23
|
-
}
|
|
24
|
-
export declare function supersede<C extends Context>(ctx: C, oldId: string, newContent: string, overrides?: SupersedeOverrides): StoreReply<C, SupersedeResult>;
|
|
25
|
-
/** Archive a kind='raw' memory: its metadata moves to raw_archive and the row is
|
|
26
|
-
* deleted. The store writes the one archive_raw audit row, under the caller's subject. */
|
|
27
|
-
export interface ArchiveRawOpts {
|
|
28
|
-
/** The connector event this archive answers. The store logs it in the archive's own transaction, so a redelivery finds it logged. */
|
|
29
|
-
event?: ConnectorEvent;
|
|
30
|
-
}
|
|
31
|
-
export interface ArchiveRawResult {
|
|
32
|
-
ok: true;
|
|
33
|
-
archivedAt: string;
|
|
34
|
-
}
|
|
35
|
-
export declare function archiveRaw<C extends Context>(ctx: C, id: string, reason: string, opts?: ArchiveRawOpts): StoreReply<C, ArchiveRawResult>;
|
|
36
|
-
//# sourceMappingURL=promote.d.ts.map
|
package/dist/api/promote.js
DELETED
|
@@ -1,65 +0,0 @@
|
|
|
1
|
-
// Promote to the global store, supersede with a successor, and archive raw memories.
|
|
2
|
-
import { ConflictError, NotFoundError } from '../core/api-errors.js';
|
|
3
|
-
import { stampOriginProject } from '../store/entry-row.js';
|
|
4
|
-
import { createSuccessor } from '../core/memory.js';
|
|
5
|
-
import { promoteToGlobal } from '../sharing/global-store.js';
|
|
6
|
-
import { loadConfig } from '../core/config.js';
|
|
7
|
-
import { andThen, notPorted, onStore } from './on-store.js';
|
|
8
|
-
import { memoryReach } from '../store/tenant-lookup.js';
|
|
9
|
-
import { canTouchScope, personalScopeOf } from '../core/recall-scope.js';
|
|
10
|
-
export function promote(ctx, id) {
|
|
11
|
-
// promoteToGlobal reads without a tenant filter, so pre-check the row's tenant_id and deny cross-tenant access with archiveRaw's not-found wording
|
|
12
|
-
// (no leak about whether the id exists in another tenant).
|
|
13
|
-
const reach = memoryReach(ctx.hippoRoot, id);
|
|
14
|
-
if (reach?.tenantId !== ctx.tenantId || !canTouchScope(ctx.actor, reach.scope)) {
|
|
15
|
-
throw new NotFoundError(`memory not found: ${id}`);
|
|
16
|
-
}
|
|
17
|
-
// The 'promote' row commits with the global copy, so no write follows the commit and a busy store fails the whole promote.
|
|
18
|
-
const globalEntry = promoteToGlobal(ctx.hippoRoot, id, {
|
|
19
|
-
actor: ctx.actor.subject,
|
|
20
|
-
tenantId: ctx.tenantId,
|
|
21
|
-
auditAs: { tenantId: ctx.tenantId, actor: ctx.actor.subject },
|
|
22
|
-
});
|
|
23
|
-
return { ok: true, sourceId: id, globalId: globalEntry.id };
|
|
24
|
-
}
|
|
25
|
-
export function supersede(ctx, oldId, newContent, overrides = {}) {
|
|
26
|
-
return onStore(ctx, (port) => {
|
|
27
|
-
const entryWrites = port.entryWrites ?? notPorted(port, 'entryWrites');
|
|
28
|
-
return andThen(port.entriesByIds([oldId], ctx.tenantId), ([old]) => {
|
|
29
|
-
const newEntry = createSuccessor(assertSupersedable(ctx, oldId, old ?? null), newContent, {
|
|
30
|
-
tenantId: ctx.tenantId,
|
|
31
|
-
baseHalfLifeDays: loadConfig(ctx.hippoRoot).defaultHalfLifeDays,
|
|
32
|
-
layer: overrides.layer,
|
|
33
|
-
tags: overrides.tags,
|
|
34
|
-
pinned: overrides.pinned,
|
|
35
|
-
});
|
|
36
|
-
// A store writes origin_project as given, so the served folder's fallback is stamped here.
|
|
37
|
-
const successor = stampOriginProject(ctx.hippoRoot, newEntry);
|
|
38
|
-
const write = { tenantId: ctx.tenantId, actor: ctx.actor.subject, ownScope: personalScopeOf(ctx.actor), oldId, successor };
|
|
39
|
-
return andThen(entryWrites.supersede(write), () => ({ ok: true, oldId, newId: successor.id }));
|
|
40
|
-
});
|
|
41
|
-
});
|
|
42
|
-
}
|
|
43
|
-
/** The tenant-scoped row to supersede; another tenant's id, or someone else's personal row, reads as not found. */
|
|
44
|
-
function assertSupersedable(ctx, oldId, old) {
|
|
45
|
-
if (!old || !canTouchScope(ctx.actor, old.scope ?? null)) {
|
|
46
|
-
throw new NotFoundError(`Memory not found: ${oldId}`);
|
|
47
|
-
}
|
|
48
|
-
// The CAS UPDATE closes the race; this check only gives a clearer error in the common single-writer case.
|
|
49
|
-
if (old.superseded_by) {
|
|
50
|
-
throw new ConflictError(`Memory ${oldId} is already superseded by ${old.superseded_by}. Supersede that one instead.`);
|
|
51
|
-
}
|
|
52
|
-
return old;
|
|
53
|
-
}
|
|
54
|
-
export function archiveRaw(ctx, id, reason, opts = {}) {
|
|
55
|
-
return onStore(ctx, (port) => {
|
|
56
|
-
const entryWrites = port.entryWrites ?? notPorted(port, 'entryWrites');
|
|
57
|
-
const archive = { tenantId: ctx.tenantId, actor: ctx.actor.subject, ownScope: personalScopeOf(ctx.actor), id, reason };
|
|
58
|
-
const { event } = opts;
|
|
59
|
-
const archived = event
|
|
60
|
-
? (port.connectorWrites ?? notPorted(port, 'connectorWrites')).archiveConnectorEntry({ ...archive, event })
|
|
61
|
-
: entryWrites.archiveRaw(archive);
|
|
62
|
-
return andThen(archived, (archivedAt) => ({ ok: true, archivedAt }));
|
|
63
|
-
});
|
|
64
|
-
}
|
|
65
|
-
//# sourceMappingURL=promote.js.map
|
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
import type { CliCoreRanker, RecallOpts, RecallResult } from './recall-types.js';
|
|
2
|
-
import type { Context } from './types.js';
|
|
3
|
-
export declare function retrieveWithCliCore(ctx: Context, opts: RecallOpts, core: CliCoreRanker): Promise<RecallResult>;
|
|
4
|
-
//# sourceMappingURL=recall-core.d.ts.map
|