hippo-memory 2.0.0 → 2.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/agent-memories/apply.d.ts +7 -5
- package/dist/agent-memories/apply.js +66 -39
- package/dist/agent-memories/claude-code.d.ts +8 -2
- package/dist/agent-memories/claude-code.js +26 -7
- package/dist/agent-memories/copilot.js +2 -1
- package/dist/agent-memories/files.js +2 -1
- package/dist/agent-memories/legacy.d.ts +6 -3
- package/dist/agent-memories/legacy.js +35 -14
- package/dist/agent-memories/markdown.d.ts +3 -1
- package/dist/agent-memories/markdown.js +3 -1
- package/dist/agent-memories/openclaw.js +5 -2
- package/dist/agent-memories/plan.js +11 -1
- package/dist/agent-memories/project-folds.js +2 -1
- package/dist/agent-memories/report.d.ts +4 -1
- package/dist/agent-memories/report.js +43 -9
- package/dist/agent-memories/source.d.ts +8 -2
- package/dist/agent-memories/source.js +11 -3
- package/dist/agent-memories/sync.d.ts +7 -2
- package/dist/agent-memories/sync.js +141 -101
- package/dist/api/assemble.d.ts +6 -4
- package/dist/api/assemble.js +11 -6
- package/dist/api/{audit.d.ts → auth/audit.d.ts} +18 -16
- package/dist/api/{audit.js → auth/audit.js} +11 -11
- package/dist/api/{auth.d.ts → auth/auth.d.ts} +19 -15
- package/dist/api/{auth.js → auth/auth.js} +46 -29
- package/dist/api/{quarantine.d.ts → auth/quarantine.d.ts} +8 -7
- package/dist/api/{quarantine.js → auth/quarantine.js} +8 -8
- package/dist/api/auth/session-owners.d.ts +10 -0
- package/dist/api/auth/session-owners.js +35 -0
- package/dist/api/availability.d.ts +3 -1
- package/dist/api/availability.js +3 -1
- package/dist/api/busy.d.ts +2 -0
- package/dist/api/busy.js +2 -0
- package/dist/api/cli-surface.d.ts +6 -0
- package/dist/api/cli-surface.js +6 -0
- package/dist/api/config-of.d.ts +5 -0
- package/dist/api/config-of.js +6 -0
- package/dist/api/context-auto.d.ts +4 -1
- package/dist/api/context-auto.js +10 -2
- package/dist/api/context-render.js +14 -7
- package/dist/api/context-select.d.ts +4 -1
- package/dist/api/context-select.js +23 -14
- package/dist/api/context-types.d.ts +38 -12
- package/dist/api/context.d.ts +8 -5
- package/dist/api/context.js +112 -57
- package/dist/api/continuity.d.ts +24 -21
- package/dist/api/continuity.js +18 -20
- package/dist/api/correction-latency.d.ts +3 -1
- package/dist/api/correction-latency.js +3 -1
- package/dist/api/error-reply.d.ts +4 -1
- package/dist/api/error-reply.js +12 -3
- package/dist/api/index.d.ts +39 -23
- package/dist/api/index.js +21 -23
- package/dist/api/instruction-detect.d.ts +4 -1
- package/dist/api/instruction-detect.js +75 -20
- package/dist/api/ledger-db.d.ts +15 -11
- package/dist/api/ledger-db.js +21 -23
- package/dist/api/memories/conflicts.d.ts +33 -0
- package/dist/api/memories/conflicts.js +67 -0
- package/dist/api/{forget.d.ts → memories/forget.d.ts} +11 -9
- package/dist/api/{forget.js → memories/forget.js} +22 -15
- package/dist/api/memories/memories.d.ts +27 -0
- package/dist/api/{memories.js → memories/memories.js} +16 -21
- package/dist/api/memories/outcome.d.ts +22 -0
- package/dist/api/{outcome.js → memories/outcome.js} +14 -8
- package/dist/api/memories/promote.d.ts +40 -0
- package/dist/api/{promote.js → memories/promote.js} +35 -22
- package/dist/api/memories/refine.d.ts +10 -0
- package/dist/api/memories/refine.js +12 -0
- package/dist/api/{remember-local.d.ts → memories/remember-local.d.ts} +16 -11
- package/dist/api/{remember-local.js → memories/remember-local.js} +34 -20
- package/dist/api/{remember.d.ts → memories/remember.d.ts} +19 -13
- package/dist/api/{remember.js → memories/remember.js} +42 -26
- package/dist/api/objects/cards.d.ts +39 -0
- package/dist/api/{cards.js → objects/cards.js} +12 -14
- package/dist/api/{drill-down.d.ts → objects/drill-down.d.ts} +12 -10
- package/dist/api/{drill-down.js → objects/drill-down.js} +7 -8
- package/dist/api/objects/goals.d.ts +18 -0
- package/dist/api/{goals.js → objects/goals.js} +12 -12
- package/dist/api/objects/graph.d.ts +11 -0
- package/dist/api/objects/graph.js +16 -0
- package/dist/api/objects/objects.d.ts +9 -0
- package/dist/api/{objects.js → objects/objects.js} +2 -4
- package/dist/api/objects/predictions.d.ts +11 -0
- package/dist/api/{predictions.js → objects/predictions.js} +7 -6
- package/dist/api/{projects.d.ts → objects/projects.d.ts} +8 -5
- package/dist/api/{projects.js → objects/projects.js} +8 -4
- package/dist/api/pilot-arm.d.ts +8 -4
- package/dist/api/pilot-arm.js +5 -4
- package/dist/api/prompt-hook.d.ts +32 -19
- package/dist/api/prompt-hook.js +65 -44
- package/dist/api/provenance-coverage.d.ts +3 -1
- package/dist/api/provenance-coverage.js +3 -1
- package/dist/api/recall/finish.d.ts +185 -0
- package/dist/api/recall/finish.js +301 -0
- package/dist/api/{recall-pipeline.d.ts → recall/pipeline.d.ts} +12 -8
- package/dist/api/{recall-pipeline.js → recall/pipeline.js} +176 -92
- package/dist/api/recall/recall.d.ts +6 -0
- package/dist/api/{recall.js → recall/recall.js} +101 -60
- package/dist/api/recall/render.d.ts +39 -0
- package/dist/api/recall/render.js +60 -0
- package/dist/api/{recall-request.d.ts → recall/request.d.ts} +7 -5
- package/dist/api/recall/request.js +261 -0
- package/dist/api/{recall-cli.d.ts → recall/rows.d.ts} +18 -12
- package/dist/api/{recall-cli.js → recall/rows.js} +28 -27
- package/dist/api/{recall-types.d.ts → recall/types.d.ts} +95 -70
- package/dist/api/{recall-types.js → recall/types.js} +1 -1
- package/dist/api/session-end.d.ts +16 -12
- package/dist/api/session-end.js +46 -30
- package/dist/api/{auto-sleep.d.ts → sleep/auto-sleep.d.ts} +9 -5
- package/dist/api/{auto-sleep.js → sleep/auto-sleep.js} +7 -12
- package/dist/api/sleep/dormant.d.ts +25 -0
- package/dist/api/sleep/dormant.js +64 -0
- package/dist/api/{learn.d.ts → sleep/learn.d.ts} +5 -4
- package/dist/api/sleep/learn.js +138 -0
- package/dist/api/sleep/sleep-run.d.ts +38 -0
- package/dist/api/{sleep-run.js → sleep/sleep-run.js} +51 -43
- package/dist/api/{sleep.d.ts → sleep/sleep.d.ts} +17 -11
- package/dist/api/sleep/sleep.js +9 -0
- package/dist/api/status.d.ts +3 -1
- package/dist/api/status.js +3 -1
- package/dist/api/store-init.d.ts +4 -1
- package/dist/api/store-init.js +4 -1
- package/dist/api/tokens.d.ts +10 -9
- package/dist/api/tokens.js +9 -10
- package/dist/api/types.d.ts +28 -7
- package/dist/api/types.js +13 -4
- package/dist/capture/caller-session.d.ts +8 -2
- package/dist/capture/caller-session.js +16 -6
- package/dist/capture/capture-error.d.ts +3 -1
- package/dist/capture/capture-error.js +3 -1
- package/dist/capture/codex-patch.js +7 -2
- package/dist/capture/command.d.ts +4 -2
- package/dist/capture/command.js +33 -14
- package/dist/capture/compact-resume-caller.js +15 -8
- package/dist/capture/compact.d.ts +8 -5
- package/dist/capture/compact.js +34 -23
- package/dist/capture/compaction-items-caller.js +9 -3
- package/dist/capture/compaction-record.d.ts +4 -3
- package/dist/capture/compaction-record.js +20 -12
- package/dist/capture/compaction-spool.d.ts +15 -4
- package/dist/capture/compaction-spool.js +64 -17
- package/dist/capture/copilot-transcript.d.ts +11 -3
- package/dist/capture/copilot-transcript.js +16 -6
- package/dist/capture/extract.js +20 -8
- package/dist/capture/failure-caller.js +23 -12
- package/dist/capture/failure-reading.d.ts +10 -3
- package/dist/capture/failure-reading.js +24 -7
- package/dist/capture/pre-compact-caller.js +11 -4
- package/dist/capture/session-digest.d.ts +15 -4
- package/dist/capture/session-digest.js +39 -13
- package/dist/capture/session-end-caller.d.ts +4 -1
- package/dist/capture/session-end-caller.js +20 -8
- package/dist/capture/session-texts.d.ts +6 -2
- package/dist/capture/session-texts.js +22 -7
- package/dist/capture/session-worker.d.ts +4 -2
- package/dist/capture/session-worker.js +45 -17
- package/dist/capture/transcript.d.ts +13 -4
- package/dist/capture/transcript.js +32 -10
- package/dist/capture/working-state.d.ts +13 -4
- package/dist/capture/working-state.js +50 -56
- package/dist/cli/api-context.d.ts +14 -2
- package/dist/cli/api-context.js +45 -2
- package/dist/cli/audit.js +23 -23
- package/dist/cli/auth.js +19 -27
- package/dist/cli/briefs.d.ts +1 -1
- package/dist/cli/briefs.js +20 -15
- package/dist/cli/card.d.ts +1 -1
- package/dist/cli/card.js +56 -73
- package/dist/cli/client.d.ts +12 -4
- package/dist/cli/client.js +43 -13
- package/dist/cli/compact-resume-payload.d.ts +4 -1
- package/dist/cli/compact-resume-payload.js +12 -5
- package/dist/cli/context.js +42 -17
- package/dist/cli/continuity.d.ts +5 -5
- package/dist/cli/continuity.js +90 -107
- package/dist/cli/curate.d.ts +4 -3
- package/dist/cli/curate.js +46 -68
- package/dist/cli/dag.d.ts +1 -1
- package/dist/cli/dag.js +14 -17
- package/dist/cli/decisions.js +27 -26
- package/dist/cli/eval.js +16 -21
- package/dist/cli/exit.d.ts +4 -1
- package/dist/cli/exit.js +10 -2
- package/dist/cli/explain.js +12 -11
- package/dist/cli/flag-values.d.ts +1 -1
- package/dist/cli/flag-values.js +9 -18
- package/dist/cli/github.d.ts +6 -0
- package/dist/cli/github.js +25 -13
- package/dist/cli/goals.d.ts +1 -1
- package/dist/cli/goals.js +39 -56
- package/dist/cli/graph.d.ts +1 -1
- package/dist/cli/graph.js +15 -11
- package/dist/cli/hook-runtime.d.ts +31 -9
- package/dist/cli/hook-runtime.js +40 -15
- package/dist/cli/incidents.d.ts +1 -1
- package/dist/cli/incidents.js +25 -25
- package/dist/cli/init.js +26 -11
- package/dist/cli/install-steps.d.ts +12 -3
- package/dist/cli/install-steps.js +42 -18
- package/dist/cli/last-sleep.d.ts +4 -1
- package/dist/cli/last-sleep.js +9 -4
- package/dist/cli/maintenance.d.ts +1 -1
- package/dist/cli/maintenance.js +11 -12
- package/dist/cli/notes.d.ts +1 -1
- package/dist/cli/notes.js +8 -5
- package/dist/cli/object-verbs.d.ts +4 -4
- package/dist/cli/object-verbs.js +10 -13
- package/dist/cli/open-browser.js +11 -2
- package/dist/cli/playbooks.d.ts +3 -3
- package/dist/cli/playbooks.js +40 -32
- package/dist/cli/predictions.js +15 -19
- package/dist/cli/print.js +4 -2
- package/dist/cli/projects.js +21 -11
- package/dist/cli/quality-repair-once.js +5 -4
- package/dist/cli/recall.js +129 -93
- package/dist/cli/refine-llm.d.ts +15 -4
- package/dist/cli/refine-llm.js +16 -7
- package/dist/cli/remember.js +46 -50
- package/dist/cli/scheduler.d.ts +4 -1
- package/dist/cli/scheduler.js +9 -5
- package/dist/cli/serve.js +22 -17
- package/dist/cli/session-hooks.d.ts +2 -2
- package/dist/cli/session-hooks.js +87 -50
- package/dist/cli/setup.js +54 -32
- package/dist/cli/shared.d.ts +3 -1
- package/dist/cli/shared.js +24 -9
- package/dist/cli/slack.js +15 -24
- package/dist/cli/sleep-render.d.ts +3 -1
- package/dist/cli/sleep-render.js +8 -5
- package/dist/cli/sleep.js +14 -6
- package/dist/cli/status.d.ts +4 -4
- package/dist/cli/status.js +32 -27
- package/dist/cli/stdin.d.ts +10 -3
- package/dist/cli/stdin.js +10 -3
- package/dist/cli/transfer.d.ts +1 -1
- package/dist/cli/transfer.js +71 -75
- package/dist/cli/verbs/memory.js +8 -6
- package/dist/cli/verbs/objects.js +10 -4
- package/dist/cli/versioned-verbs.d.ts +8 -7
- package/dist/cli/versioned-verbs.js +31 -21
- package/dist/cli.js +13 -16
- package/dist/connectors/dlq.d.ts +6 -6
- package/dist/connectors/dlq.js +12 -8
- package/dist/connectors/github/backfill.d.ts +4 -4
- package/dist/connectors/github/backfill.js +6 -4
- package/dist/connectors/github/deletion.d.ts +6 -4
- package/dist/connectors/github/deletion.js +5 -5
- package/dist/connectors/github/dlq.d.ts +8 -6
- package/dist/connectors/github/dlq.js +11 -5
- package/dist/connectors/github/ingest.d.ts +2 -2
- package/dist/connectors/github/ingest.js +9 -6
- package/dist/connectors/github/octokit-client.d.ts +3 -1
- package/dist/connectors/github/octokit-client.js +7 -2
- package/dist/connectors/github/ratelimit.d.ts +6 -2
- package/dist/connectors/github/ratelimit.js +6 -2
- package/dist/connectors/github/signature.d.ts +14 -3
- package/dist/connectors/github/signature.js +17 -3
- package/dist/connectors/github/tenant-routing.d.ts +6 -4
- package/dist/connectors/github/tenant-routing.js +6 -6
- package/dist/connectors/github/transform.js +50 -67
- package/dist/connectors/github/types.d.ts +10 -3
- package/dist/connectors/github/types.js +6 -2
- package/dist/connectors/github/webhook.d.ts +5 -5
- package/dist/connectors/github/webhook.js +34 -23
- package/dist/connectors/ingest.d.ts +5 -3
- package/dist/connectors/ingest.js +3 -4
- package/dist/connectors/slack/backfill.d.ts +5 -5
- package/dist/connectors/slack/backfill.js +3 -3
- package/dist/connectors/slack/deletion.d.ts +4 -4
- package/dist/connectors/slack/deletion.js +6 -6
- package/dist/connectors/slack/dlq.d.ts +4 -4
- package/dist/connectors/slack/dlq.js +6 -6
- package/dist/connectors/slack/ingest.d.ts +6 -4
- package/dist/connectors/slack/ingest.js +5 -5
- package/dist/connectors/slack/signature.d.ts +4 -1
- package/dist/connectors/slack/tenant-routing.d.ts +6 -4
- package/dist/connectors/slack/tenant-routing.js +6 -6
- package/dist/connectors/slack/transform.d.ts +6 -2
- package/dist/connectors/slack/transform.js +6 -2
- package/dist/connectors/slack/types.d.ts +3 -1
- package/dist/connectors/slack/web-client.js +8 -3
- package/dist/connectors/slack/webhook.d.ts +5 -5
- package/dist/connectors/slack/webhook.js +19 -11
- package/dist/connectors/slack/workspaces.d.ts +7 -3
- package/dist/connectors/slack/workspaces.js +7 -3
- package/dist/connectors/store.d.ts +8 -0
- package/dist/connectors/store.js +2 -0
- package/dist/consolidate/conflicts.js +23 -9
- package/dist/consolidate/dag-summary.js +2 -1
- package/dist/consolidate/dag.d.ts +10 -5
- package/dist/consolidate/dag.js +37 -36
- package/dist/consolidate/decay.js +19 -6
- package/dist/consolidate/dedupe.d.ts +14 -5
- package/dist/consolidate/dedupe.js +27 -16
- package/dist/consolidate/flush-units.d.ts +4 -1
- package/dist/consolidate/flush-units.js +4 -1
- package/dist/consolidate/half-life-migration.d.ts +18 -8
- package/dist/consolidate/half-life-migration.js +48 -18
- package/dist/consolidate/llm-passes.js +27 -11
- package/dist/consolidate/memory-value-weights.d.ts +6 -2
- package/dist/consolidate/memory-value-weights.js +6 -2
- package/dist/consolidate/memory-value.d.ts +30 -10
- package/dist/consolidate/memory-value.js +36 -13
- package/dist/consolidate/merge.d.ts +4 -1
- package/dist/consolidate/merge.js +42 -32
- package/dist/consolidate/overlap-index.d.ts +8 -2
- package/dist/consolidate/overlap-index.js +11 -4
- package/dist/consolidate/physics-pass.d.ts +3 -1
- package/dist/consolidate/physics-pass.js +10 -7
- package/dist/consolidate/replay.d.ts +11 -4
- package/dist/consolidate/replay.js +19 -7
- package/dist/consolidate/run.d.ts +13 -5
- package/dist/consolidate/run.js +4 -4
- package/dist/consolidate/sleep.d.ts +14 -6
- package/dist/consolidate/sleep.js +41 -38
- package/dist/consolidate/trace.d.ts +7 -2
- package/dist/consolidate/trace.js +7 -2
- package/dist/consolidate/traces.js +26 -29
- package/dist/core/ablation.d.ts +9 -3
- package/dist/core/ablation.js +14 -4
- package/dist/core/active-scope.d.ts +3 -1
- package/dist/core/active-scope.js +3 -1
- package/dist/core/agent-memory-tools.d.ts +2 -0
- package/dist/core/agent-memory-tools.js +2 -0
- package/dist/core/ambient.d.ts +4 -3
- package/dist/core/ambient.js +8 -6
- package/dist/core/api-errors.d.ts +9 -3
- package/dist/core/api-errors.js +9 -3
- package/dist/core/capture-contract.d.ts +4 -1
- package/dist/core/capture-contract.js +27 -8
- package/dist/core/compare.d.ts +24 -8
- package/dist/core/compare.js +24 -8
- package/dist/core/config.d.ts +18 -9
- package/dist/core/config.js +24 -14
- package/dist/core/cosine.d.ts +4 -1
- package/dist/core/cosine.js +4 -1
- package/dist/core/handoff.d.ts +7 -2
- package/dist/core/handoff.js +4 -1
- package/dist/core/markdown.js +21 -16
- package/dist/core/memory-audit.js +14 -3
- package/dist/core/memory-quality.d.ts +12 -3
- package/dist/core/memory-quality.js +57 -21
- package/dist/core/memory.d.ts +84 -27
- package/dist/core/memory.js +73 -29
- package/dist/core/merged-row.d.ts +8 -2
- package/dist/core/merged-row.js +10 -3
- package/dist/core/package-root.d.ts +3 -1
- package/dist/core/package-root.js +3 -1
- package/dist/core/particle-refresh.d.ts +8 -0
- package/dist/core/particle-refresh.js +22 -0
- package/dist/core/physics-config.d.ts +4 -1
- package/dist/core/physics-config.js +6 -2
- package/dist/core/physics.d.ts +37 -11
- package/dist/core/physics.js +55 -20
- package/dist/core/project-identity.d.ts +34 -17
- package/dist/core/project-identity.js +33 -17
- package/dist/core/project-remote.d.ts +8 -4
- package/dist/core/project-remote.js +31 -14
- package/dist/core/recall-scope.d.ts +33 -11
- package/dist/core/recall-scope.js +42 -15
- package/dist/core/rejection-digest.d.ts +7 -0
- package/dist/core/rejection-digest.js +13 -0
- package/dist/core/salience.d.ts +3 -1
- package/dist/core/salience.js +10 -4
- package/dist/core/search-types.d.ts +15 -2
- package/dist/core/search-types.js +11 -0
- package/dist/dashboard/dashboard-actions.js +13 -2
- package/dist/dashboard/dashboard-snapshot.d.ts +2 -2
- package/dist/dashboard/dashboard-snapshot.js +4 -4
- package/dist/dashboard/dashboard.js +6 -3
- package/dist/db/backup.js +2 -2
- package/dist/db/busy.d.ts +10 -3
- package/dist/db/busy.js +27 -5
- package/dist/db/connect.d.ts +10 -3
- package/dist/db/connect.js +8 -3
- package/dist/db/continuity.d.ts +1 -1
- package/dist/db/continuity.js +27 -11
- package/dist/db/meta.d.ts +4 -1
- package/dist/db/meta.js +4 -1
- package/dist/db/migrate.d.ts +10 -5
- package/dist/db/migrate.js +26 -13
- package/dist/db/migrations/index.d.ts +1 -1
- package/dist/db/migrations/index.js +3 -1
- package/dist/db/migrations/types.d.ts +2 -1
- package/dist/db/migrations/v12.js +2 -1
- package/dist/db/migrations/v14.js +2 -1
- package/dist/db/migrations/v15.js +4 -2
- package/dist/db/migrations/v16.js +6 -3
- package/dist/db/migrations/v17.js +2 -1
- package/dist/db/migrations/v19.js +4 -2
- package/dist/db/migrations/v20.js +2 -1
- package/dist/db/migrations/v22.js +12 -6
- package/dist/db/migrations/v23.js +6 -3
- package/dist/db/migrations/v24.js +6 -3
- package/dist/db/migrations/v25.js +4 -2
- package/dist/db/migrations/v26.js +4 -2
- package/dist/db/migrations/v27.js +6 -3
- package/dist/db/migrations/v28.js +4 -2
- package/dist/db/migrations/v29.js +4 -2
- package/dist/db/migrations/v30.js +6 -3
- package/dist/db/migrations/v31.js +4 -2
- package/dist/db/migrations/v32.js +6 -3
- package/dist/db/migrations/v33.js +4 -2
- package/dist/db/migrations/v34.js +2 -1
- package/dist/db/migrations/v35.js +2 -1
- package/dist/db/migrations/v36.js +2 -1
- package/dist/db/migrations/v37.js +10 -5
- package/dist/db/migrations/v38.js +10 -5
- package/dist/db/migrations/v39.js +14 -6
- package/dist/db/migrations/v40.js +4 -2
- package/dist/db/migrations/v41.js +4 -2
- package/dist/db/migrations/v42.js +2 -1
- package/dist/db/migrations/v44.js +4 -2
- package/dist/db/migrations/v45.js +4 -2
- package/dist/db/migrations/v49.js +2 -1
- package/dist/db/migrations/v50.js +4 -2
- package/dist/db/migrations/v51.js +4 -2
- package/dist/db/migrations/v52.js +2 -1
- package/dist/db/migrations/v53.js +8 -4
- package/dist/db/migrations/v54.js +2 -1
- package/dist/db/migrations/v55.js +4 -2
- package/dist/db/migrations/v56.d.ts +3 -0
- package/dist/db/migrations/v56.js +28 -0
- package/dist/db/open.d.ts +24 -12
- package/dist/db/open.js +25 -13
- package/dist/db/physics-state.d.ts +8 -4
- package/dist/db/physics-state.js +13 -20
- package/dist/db/raw-archive-mirror-cleanup.d.ts +4 -2
- package/dist/db/raw-archive-mirror-cleanup.js +6 -4
- package/dist/db/request-stores.d.ts +19 -5
- package/dist/db/request-stores.js +14 -5
- package/dist/db/tables.d.ts +2 -1
- package/dist/db/tables.js +12 -4
- package/dist/db/vector-store.d.ts +13 -4
- package/dist/db/vector-store.js +34 -14
- package/dist/db/wal-checkpointer.d.ts +2 -1
- package/dist/db/wal-checkpointer.js +19 -7
- package/dist/doctor.d.ts +4 -1
- package/dist/doctor.js +121 -39
- package/dist/embeddings/local.d.ts +8 -4
- package/dist/embeddings/local.js +9 -5
- package/dist/embeddings/provider.d.ts +19 -10
- package/dist/embeddings/provider.js +31 -17
- package/dist/embeddings/transformers.d.ts +16 -4
- package/dist/embeddings/transformers.js +32 -15
- package/dist/entry/json-hooks.d.ts +1 -1
- package/dist/entry/json-hooks.js +1 -1
- package/dist/entry/project-identity.js +2 -1
- package/dist/entry/session-text.d.ts +1 -1
- package/dist/entry/session-text.js +1 -1
- package/dist/entry/sqlite-handles.d.ts +10 -0
- package/dist/entry/sqlite-handles.js +9 -0
- package/dist/entry/store-kit.d.ts +19 -6
- package/dist/entry/store-kit.js +6 -4
- package/dist/eval/eval-stats.d.ts +27 -8
- package/dist/eval/eval-stats.js +17 -5
- package/dist/eval/eval-suite.d.ts +3 -1
- package/dist/eval/eval-suite.js +409 -187
- package/dist/eval/eval.d.ts +8 -2
- package/dist/eval/eval.js +8 -2
- package/dist/eval/judgment.js +16 -6
- package/dist/graph/delta.d.ts +9 -42
- package/dist/graph/delta.js +17 -11
- package/dist/graph/extract.d.ts +10 -7
- package/dist/graph/extract.js +57 -25
- package/dist/graph/recall.d.ts +12 -4
- package/dist/graph/recall.js +30 -13
- package/dist/graph/stream.d.ts +18 -6
- package/dist/graph/stream.js +32 -10
- package/dist/graph/view.d.ts +19 -6
- package/dist/graph/view.js +42 -17
- package/dist/hooks/codex-session.js +2 -2
- package/dist/hooks/codex-wrapper.d.ts +3 -1
- package/dist/hooks/codex-wrapper.js +9 -4
- package/dist/hooks/copilot.d.ts +19 -5
- package/dist/hooks/copilot.js +54 -15
- package/dist/hooks/hook-blocks.d.ts +4 -1
- package/dist/hooks/hook-blocks.js +8 -3
- package/dist/hooks/json-hooks.d.ts +9 -5
- package/dist/hooks/json-hooks.js +69 -34
- package/dist/hooks/opencode.js +15 -5
- package/dist/hooks/shared.d.ts +27 -8
- package/dist/hooks/shared.js +57 -16
- package/dist/importers/core.d.ts +12 -4
- package/dist/importers/core.js +8 -7
- package/dist/importers/markdown-parse.d.ts +15 -5
- package/dist/importers/markdown-parse.js +16 -7
- package/dist/importers/markdown.js +6 -9
- package/dist/importers/sources.js +10 -23
- package/dist/importers/vault.d.ts +2 -2
- package/dist/importers/vault.js +43 -27
- package/dist/index.d.ts +32 -6
- package/dist/index.js +25 -7
- package/dist/learn/autolearn.d.ts +17 -6
- package/dist/learn/autolearn.js +53 -24
- package/dist/learn/churn-git.d.ts +4 -1
- package/dist/learn/churn-git.js +29 -5
- package/dist/learn/extract.d.ts +4 -1
- package/dist/learn/extract.js +16 -9
- package/dist/learn/forward-claim-detector.d.ts +17 -5
- package/dist/learn/forward-claim-detector.js +34 -15
- package/dist/learn/invalidation.d.ts +12 -7
- package/dist/learn/invalidation.js +56 -27
- package/dist/learn/roots.d.ts +3 -0
- package/dist/learn/roots.js +5 -0
- package/dist/mcp/admin-tools.d.ts +5 -5
- package/dist/mcp/admin-tools.js +28 -23
- package/dist/mcp/format.d.ts +1 -1
- package/dist/mcp/format.js +4 -2
- package/dist/mcp/framing.d.ts +3 -1
- package/dist/mcp/framing.js +20 -8
- package/dist/mcp/memory-tools.d.ts +3 -3
- package/dist/mcp/memory-tools.js +18 -14
- package/dist/mcp/protocol.d.ts +32 -16
- package/dist/mcp/protocol.js +12 -9
- package/dist/mcp/recall-tools.d.ts +3 -3
- package/dist/mcp/recall-tools.js +62 -74
- package/dist/mcp/request.d.ts +7 -5
- package/dist/mcp/request.js +57 -74
- package/dist/mcp/server.d.ts +3 -1
- package/dist/mcp/server.js +8 -3
- package/dist/mcp/session-state.d.ts +1 -1
- package/dist/mcp/session-state.js +4 -3
- package/dist/mcp/shared-gate.d.ts +3 -2
- package/dist/mcp/shared-gate.js +3 -2
- package/dist/mcp/stdio.d.ts +6 -3
- package/dist/mcp/stdio.js +52 -21
- package/dist/mcp/tool-args.d.ts +4 -1
- package/dist/mcp/tool-args.js +8 -3
- package/dist/mcp/tools.js +76 -32
- package/dist/objects/customer-notes.d.ts +12 -10
- package/dist/objects/customer-notes.js +21 -15
- package/dist/objects/decisions.d.ts +18 -10
- package/dist/objects/decisions.js +23 -17
- package/dist/objects/descriptor.js +2 -1
- package/dist/objects/fields.d.ts +4 -1
- package/dist/objects/fields.js +6 -2
- package/dist/objects/incidents.d.ts +14 -16
- package/dist/objects/incidents.js +29 -30
- package/dist/objects/lifecycle.d.ts +0 -4
- package/dist/objects/lifecycle.js +21 -24
- package/dist/objects/policies.d.ts +12 -16
- package/dist/objects/policies.js +17 -21
- package/dist/objects/processes.d.ts +16 -10
- package/dist/objects/processes.js +20 -15
- package/dist/objects/project-briefs.d.ts +13 -14
- package/dist/objects/project-briefs.js +33 -39
- package/dist/objects/skills.d.ts +10 -12
- package/dist/objects/skills.js +17 -22
- package/dist/postinstall.js +15 -7
- package/dist/predictions/planning-fallacy.d.ts +19 -6
- package/dist/predictions/planning-fallacy.js +4 -2
- package/dist/rerankers/clef.d.ts +8 -2
- package/dist/rerankers/clef.js +14 -9
- package/dist/rerankers/cross-encoder.d.ts +2 -1
- package/dist/rerankers/cross-encoder.js +9 -6
- package/dist/rerankers/index.js +2 -1
- package/dist/rerankers/jev.js +2 -1
- package/dist/rerankers/llm.d.ts +6 -2
- package/dist/rerankers/llm.js +8 -3
- package/dist/rerankers/remote.d.ts +3 -1
- package/dist/rerankers/remote.js +5 -2
- package/dist/rerankers/types.d.ts +6 -2
- package/dist/search/bm25-search.d.ts +3 -1
- package/dist/search/bm25-search.js +15 -2
- package/dist/search/boosts.js +4 -3
- package/dist/search/embed-memories.d.ts +10 -5
- package/dist/search/embed-memories.js +62 -36
- package/dist/search/engine.d.ts +4 -1
- package/dist/search/engine.js +6 -2
- package/dist/search/goal-boost.d.ts +10 -3
- package/dist/search/goal-boost.js +13 -6
- package/dist/search/hybrid-score.d.ts +4 -1
- package/dist/search/hybrid-score.js +4 -1
- package/dist/search/hybrid.d.ts +23 -8
- package/dist/search/hybrid.js +12 -7
- package/dist/search/multihop.js +14 -13
- package/dist/search/path-context.d.ts +10 -3
- package/dist/search/path-context.js +10 -3
- package/dist/search/physics-search.d.ts +9 -4
- package/dist/search/physics-search.js +38 -14
- package/dist/search/rerank.d.ts +2 -1
- package/dist/search/rerank.js +2 -1
- package/dist/search/rrf.d.ts +14 -5
- package/dist/search/rrf.js +11 -4
- package/dist/search/vector.d.ts +8 -2
- package/dist/search/vector.js +9 -3
- package/dist/server/auth.d.ts +18 -14
- package/dist/server/auth.js +69 -38
- package/dist/server/boot.d.ts +3 -1
- package/dist/server/boot.js +95 -56
- package/dist/server/client-ip.d.ts +11 -4
- package/dist/server/client-ip.js +27 -10
- package/dist/server/cursor.d.ts +10 -3
- package/dist/server/cursor.js +10 -3
- package/dist/server/deadline.d.ts +5 -2
- package/dist/server/deadline.js +10 -3
- package/dist/server/key-check-bounds.js +12 -4
- package/dist/server/lifecycle.d.ts +4 -1
- package/dist/server/lifecycle.js +10 -4
- package/dist/server/mcp-http.d.ts +2 -1
- package/dist/server/mcp-http.js +37 -22
- package/dist/server/rate-limit.d.ts +17 -5
- package/dist/server/rate-limit.js +55 -26
- package/dist/server/ready.js +7 -4
- package/dist/server/request.d.ts +15 -4
- package/dist/server/request.js +42 -15
- package/dist/server/route-checks.d.ts +4 -1
- package/dist/server/route-checks.js +8 -3
- package/dist/server/route-table.d.ts +8 -6
- package/dist/server/route-table.js +547 -93
- package/dist/server/routes/admin.d.ts +7 -7
- package/dist/server/routes/admin.js +36 -15
- package/dist/server/routes/customer-notes.d.ts +5 -5
- package/dist/server/routes/customer-notes.js +5 -4
- package/dist/server/routes/decisions.d.ts +5 -5
- package/dist/server/routes/decisions.js +12 -6
- package/dist/server/routes/incidents.d.ts +5 -5
- package/dist/server/routes/incidents.js +10 -4
- package/dist/server/routes/memories.d.ts +8 -8
- package/dist/server/routes/memories.js +12 -19
- package/dist/server/routes/object-routes.d.ts +8 -5
- package/dist/server/routes/object-routes.js +4 -2
- package/dist/server/routes/policies.d.ts +6 -6
- package/dist/server/routes/policies.js +11 -4
- package/dist/server/routes/predictions.d.ts +5 -5
- package/dist/server/routes/predictions.js +9 -4
- package/dist/server/routes/processes.d.ts +5 -5
- package/dist/server/routes/processes.js +15 -6
- package/dist/server/routes/project-briefs.d.ts +6 -6
- package/dist/server/routes/project-briefs.js +3 -2
- package/dist/server/routes/recall.d.ts +3 -3
- package/dist/server/routes/recall.js +21 -10
- package/dist/server/routes/skills.d.ts +6 -6
- package/dist/server/routes/skills.js +12 -4
- package/dist/server/server-detect.d.ts +24 -8
- package/dist/server/server-detect.js +57 -22
- package/dist/server/sleep-child.js +16 -10
- package/dist/server/sleep-offload.d.ts +8 -5
- package/dist/server/sleep-offload.js +41 -19
- package/dist/server/tls.d.ts +4 -1
- package/dist/server/tls.js +13 -5
- package/dist/server/types.d.ts +38 -26
- package/dist/server/validation.d.ts +4 -1
- package/dist/server/validation.js +22 -9
- package/dist/server.d.ts +15 -10
- package/dist/server.js +32 -12
- package/dist/sharing/global-store.d.ts +5 -10
- package/dist/sharing/global-store.js +8 -43
- package/dist/sharing/global-sync.d.ts +3 -1
- package/dist/sharing/global-sync.js +16 -6
- package/dist/sharing/project-merge.d.ts +25 -7
- package/dist/sharing/project-merge.js +49 -17
- package/dist/sharing/search-both.d.ts +8 -4
- package/dist/sharing/search-both.js +19 -12
- package/dist/sharing/share.d.ts +8 -4
- package/dist/sharing/share.js +39 -15
- package/dist/store/ambient.js +9 -5
- package/dist/store/audit-event.d.ts +2 -2
- package/dist/store/audit-event.js +8 -3
- package/dist/store/audit.d.ts +6 -3
- package/dist/store/audit.js +16 -6
- package/dist/store/auth.d.ts +4 -2
- package/dist/store/auth.js +63 -20
- package/dist/store/busy.d.ts +9 -0
- package/dist/store/busy.js +16 -0
- package/dist/store/candidates.d.ts +12 -5
- package/dist/store/candidates.js +75 -36
- package/dist/store/capture-write.d.ts +2 -1
- package/dist/store/capture-write.js +2 -1
- package/dist/store/card-detail.d.ts +4 -4
- package/dist/store/card-detail.js +15 -8
- package/dist/store/cards.d.ts +24 -10
- package/dist/store/cards.js +93 -60
- package/dist/store/compaction-caller.d.ts +2 -1
- package/dist/store/compaction-caller.js +2 -1
- package/dist/store/compactions-record.d.ts +14 -8
- package/dist/store/compactions-record.js +95 -32
- package/dist/store/compactions.js +35 -15
- package/dist/store/conflicts.d.ts +9 -4
- package/dist/store/conflicts.js +100 -45
- package/dist/store/connectors/dlq.d.ts +17 -5
- package/dist/store/connectors/dlq.js +56 -5
- package/dist/store/connectors/event-log.d.ts +111 -2
- package/dist/store/connectors/event-log.js +2 -1
- package/dist/store/connectors/github.d.ts +6 -3
- package/dist/store/connectors/github.js +24 -40
- package/dist/store/connectors/slack.d.ts +2 -1
- package/dist/store/connectors/slack.js +25 -37
- package/dist/store/dashboard-reads.d.ts +7 -3
- package/dist/store/dashboard-reads.js +32 -11
- package/dist/store/delete-and-batch.d.ts +17 -11
- package/dist/store/delete-and-batch.js +67 -26
- package/dist/store/delivery-recorder.d.ts +8 -5
- package/dist/store/delivery-recorder.js +70 -32
- package/dist/store/descendant-page.d.ts +2 -1
- package/dist/store/descendant-page.js +24 -9
- package/dist/store/diagnostics.d.ts +2 -1
- package/dist/store/diagnostics.js +2 -1
- package/dist/store/doctor-reads.d.ts +2 -1
- package/dist/store/doctor-reads.js +13 -5
- package/dist/store/dormant.d.ts +19 -11
- package/dist/store/dormant.js +40 -18
- package/dist/store/embeddings/index.d.ts +13 -9
- package/dist/store/embeddings/index.js +19 -12
- package/dist/store/entry-reads.d.ts +49 -20
- package/dist/store/entry-reads.js +181 -66
- package/dist/store/entry-row.d.ts +10 -6
- package/dist/store/entry-row.js +17 -12
- package/dist/store/entry-writes.d.ts +22 -10
- package/dist/store/entry-writes.js +41 -14
- package/dist/store/failure-log-at.js +1 -1
- package/dist/store/failure-log.d.ts +4 -2
- package/dist/store/failure-log.js +13 -6
- package/dist/store/gated-write.d.ts +3 -3
- package/dist/store/gated-write.js +3 -3
- package/dist/store/goals.d.ts +5 -4
- package/dist/store/goals.js +8 -10
- package/dist/store/graph-apply.d.ts +21 -0
- package/dist/{graph/write.js → store/graph-apply.js} +31 -11
- package/dist/store/graph-queue.d.ts +9 -6
- package/dist/store/graph-queue.js +15 -10
- package/dist/store/graph-reads.d.ts +16 -11
- package/dist/store/graph-reads.js +24 -15
- package/dist/store/graph-rows.d.ts +41 -3
- package/dist/store/graph-rows.js +10 -7
- package/dist/store/graph-view-rows.js +14 -7
- package/dist/store/graph-writes.d.ts +16 -10
- package/dist/store/graph-writes.js +59 -36
- package/dist/store/handoffs.d.ts +4 -4
- package/dist/store/handoffs.js +40 -19
- package/dist/store/index-and-stats.d.ts +2 -2
- package/dist/store/index-and-stats.js +6 -5
- package/dist/store/index.d.ts +3 -1
- package/dist/store/index.js +1 -0
- package/dist/store/key-audit.d.ts +2 -1
- package/dist/store/key-audit.js +2 -1
- package/dist/store/key-writes.d.ts +2 -1
- package/dist/store/key-writes.js +9 -2
- package/dist/store/ledger-turn.d.ts +4 -1
- package/dist/store/ledger-turn.js +7 -2
- package/dist/store/mirrors.d.ts +11 -4
- package/dist/store/mirrors.js +88 -16
- package/dist/store/narrow.d.ts +6 -0
- package/dist/store/narrow.js +11 -0
- package/dist/store/open.d.ts +4 -2
- package/dist/store/open.js +18 -9
- package/dist/store/pilot-arm.d.ts +2 -1
- package/dist/store/pilot-arm.js +18 -6
- package/dist/store/planning-fallacy-evidence.d.ts +2 -2
- package/dist/store/planning-fallacy-evidence.js +8 -5
- package/dist/store/port/agent-import.d.ts +62 -0
- package/dist/store/port/agent-import.js +2 -0
- package/dist/store/port/consolidation.d.ts +129 -0
- package/dist/store/port/consolidation.js +2 -0
- package/dist/store/port/learning.d.ts +19 -0
- package/dist/store/port/learning.js +2 -0
- package/dist/store/port/local-files.d.ts +18 -0
- package/dist/store/port/local-files.js +2 -0
- package/dist/store/port/promotion.d.ts +20 -0
- package/dist/store/port/promotion.js +3 -0
- package/dist/store/port-groups.d.ts +160 -0
- package/dist/store/port-groups.js +2 -0
- package/dist/store/port.d.ts +215 -229
- package/dist/store/port.js +3 -9
- package/dist/store/predictions.d.ts +14 -10
- package/dist/store/predictions.js +37 -17
- package/dist/store/project-tags.d.ts +4 -1
- package/dist/store/project-tags.js +16 -5
- package/dist/store/quality-repair.d.ts +8 -4
- package/dist/store/quality-repair.js +53 -20
- package/dist/store/quarantine.d.ts +1 -0
- package/dist/store/quarantine.js +23 -9
- package/dist/store/raw-archive.d.ts +5 -4
- package/dist/store/raw-archive.js +11 -10
- package/dist/store/recall-trace.d.ts +22 -17
- package/dist/store/recall-trace.js +126 -63
- package/dist/store/rejected-values.d.ts +15 -10
- package/dist/store/rejected-values.js +33 -12
- package/dist/store/rejection.d.ts +12 -11
- package/dist/store/rejection.js +18 -19
- package/dist/store/report-reads.d.ts +2 -1
- package/dist/store/report-reads.js +2 -1
- package/dist/store/rows.d.ts +7 -5
- package/dist/store/rows.js +18 -11
- package/dist/store/rule-sql.d.ts +6 -4
- package/dist/store/rule-sql.js +16 -9
- package/dist/store/search-rows.d.ts +14 -9
- package/dist/store/search-rows.js +48 -23
- package/dist/store/sessions.d.ts +12 -10
- package/dist/store/sessions.js +40 -21
- package/dist/store/set-aside.d.ts +2 -2
- package/dist/store/set-aside.js +18 -5
- package/dist/store/sqlite/agent-import.d.ts +3 -0
- package/dist/store/sqlite/agent-import.js +77 -0
- package/dist/store/sqlite/cards-group.d.ts +6 -0
- package/dist/store/sqlite/cards-group.js +37 -0
- package/dist/store/sqlite/conflicts-group.d.ts +6 -0
- package/dist/store/sqlite/conflicts-group.js +18 -0
- package/dist/store/sqlite/connector-events-group.d.ts +2 -1
- package/dist/store/sqlite/connector-events-group.js +17 -6
- package/dist/store/sqlite/connector-writes-group.d.ts +2 -1
- package/dist/store/sqlite/connector-writes-group.js +9 -4
- package/dist/store/sqlite/consolidation-group.d.ts +4 -0
- package/dist/store/sqlite/consolidation-group.js +64 -0
- package/dist/store/sqlite/dag-reads-group.js +1 -1
- package/dist/store/sqlite/dormant-group.d.ts +6 -0
- package/dist/store/sqlite/dormant-group.js +29 -0
- package/dist/store/sqlite/entry-writes-group.d.ts +6 -3
- package/dist/store/sqlite/entry-writes-group.js +37 -14
- package/dist/store/sqlite/error-codec.d.ts +4 -2
- package/dist/store/sqlite/error-codec.js +32 -10
- package/dist/store/sqlite/executor-counts.js +2 -1
- package/dist/store/sqlite/executor.d.ts +8 -3
- package/dist/store/sqlite/executor.js +56 -18
- package/dist/store/sqlite/global-promote.d.ts +5 -0
- package/dist/store/sqlite/global-promote.js +48 -0
- package/dist/store/sqlite/goals-group.d.ts +6 -0
- package/dist/store/sqlite/goals-group.js +23 -0
- package/dist/store/sqlite/graph-reads-group.d.ts +2 -1
- package/dist/store/sqlite/graph-reads-group.js +2 -1
- package/dist/store/sqlite/held-connection.d.ts +7 -1
- package/dist/store/sqlite/held-connection.js +34 -7
- package/dist/store/sqlite/last-recall-group.d.ts +4 -2
- package/dist/store/sqlite/last-recall-group.js +9 -4
- package/dist/store/sqlite/learning-group.d.ts +4 -0
- package/dist/store/sqlite/learning-group.js +17 -0
- package/dist/store/sqlite/maintenance-groups.js +2 -1
- package/dist/store/sqlite/object-rows.d.ts +6 -3
- package/dist/store/sqlite/object-rows.js +34 -5
- package/dist/store/sqlite/objects-group.d.ts +5 -4
- package/dist/store/sqlite/objects-group.js +84 -33
- package/dist/store/sqlite/predictions-group.d.ts +2 -1
- package/dist/store/sqlite/predictions-group.js +4 -2
- package/dist/store/sqlite/promotion-group.d.ts +3 -0
- package/dist/store/sqlite/promotion-group.js +10 -0
- package/dist/store/sqlite/quarantine-group.d.ts +2 -1
- package/dist/store/sqlite/quarantine-group.js +4 -2
- package/dist/store/sqlite/reports-group.d.ts +6 -0
- package/dist/store/sqlite/reports-group.js +33 -0
- package/dist/store/sqlite/request-scope.d.ts +6 -0
- package/dist/store/sqlite/request-scope.js +18 -0
- package/dist/store/sqlite/sessions-group.d.ts +6 -0
- package/dist/store/sqlite/sessions-group.js +46 -0
- package/dist/store/sqlite/store.d.ts +22 -11
- package/dist/store/sqlite/store.js +84 -11
- package/dist/store/sqlite/vector-pack.js +2 -1
- package/dist/store/sqlite/vector-reads-group.js +2 -1
- package/dist/store/sqlite/worker-jobs.d.ts +2 -1
- package/dist/store/sqlite/worker-jobs.js +19 -7
- package/dist/store/sqlite/worker-ops.d.ts +10 -5
- package/dist/store/sqlite/worker-ops.js +6 -3
- package/dist/store/sqlite/worker-store.d.ts +4 -3
- package/dist/store/sqlite/worker-store.js +24 -14
- package/dist/store/summaries.d.ts +19 -12
- package/dist/store/summaries.js +36 -21
- package/dist/store/summary-dirty.d.ts +2 -1
- package/dist/store/summary-dirty.js +2 -1
- package/dist/store/tenant.d.ts +3 -2
- package/dist/store/tenant.js +5 -4
- package/dist/store/token-ledger-rows.js +6 -3
- package/dist/store/token-ledger.d.ts +19 -13
- package/dist/store/token-ledger.js +27 -14
- package/dist/store/tombstone-checks.d.ts +4 -1
- package/dist/store/tombstone-checks.js +10 -1
- package/dist/store/usage-reports.js +2 -1
- package/dist/store/vector-index.d.ts +8 -5
- package/dist/store/vector-index.js +24 -10
- package/dist/store/working-memory.d.ts +6 -4
- package/dist/store/working-memory.js +14 -9
- package/dist/support-bundle.js +10 -5
- package/dist/trust/quarantine.d.ts +1 -2
- package/dist/trust/quarantine.js +1 -5
- package/dist/trust/reject-flow.d.ts +12 -3
- package/dist/trust/reject-flow.js +12 -4
- package/dist/util/anthropic-messages.d.ts +4 -1
- package/dist/util/anthropic-messages.js +14 -5
- package/dist/util/atomic-write.d.ts +4 -2
- package/dist/util/atomic-write.js +25 -14
- package/dist/util/compaction-items.d.ts +4 -1
- package/dist/util/compaction-items.js +8 -2
- package/dist/util/crash-handlers.d.ts +7 -2
- package/dist/util/crash-handlers.js +13 -4
- package/dist/util/env.d.ts +16 -4
- package/dist/util/env.js +78 -25
- package/dist/util/home-path.js +12 -6
- package/dist/util/hook-payload.d.ts +3 -1
- package/dist/util/hook-payload.js +3 -1
- package/dist/util/http-retry.d.ts +12 -6
- package/dist/util/http-retry.js +16 -6
- package/dist/util/http-util.d.ts +20 -5
- package/dist/util/http-util.js +28 -9
- package/dist/util/json.d.ts +4 -1
- package/dist/util/json.js +4 -1
- package/dist/util/keyset.js +2 -1
- package/dist/util/limits.js +4 -2
- package/dist/util/log.d.ts +13 -5
- package/dist/util/log.js +29 -6
- package/dist/util/net.d.ts +5 -0
- package/dist/util/net.js +19 -0
- package/dist/util/real-path.d.ts +2 -1
- package/dist/util/real-path.js +4 -3
- package/dist/util/request-scope.d.ts +11 -3
- package/dist/util/request-scope.js +13 -4
- package/dist/util/same-text.d.ts +10 -3
- package/dist/util/same-text.js +10 -3
- package/dist/util/secret-detect.d.ts +24 -7
- package/dist/util/secret-detect.js +49 -14
- package/dist/util/spawn-argv.d.ts +3 -1
- package/dist/util/spawn-argv.js +13 -4
- package/dist/util/sqlite-blocked.d.ts +15 -4
- package/dist/util/sqlite-blocked.js +19 -6
- package/dist/util/stored-json.d.ts +4 -1
- package/dist/util/stored-json.js +6 -2
- package/dist/util/stream-tee.d.ts +2 -1
- package/dist/util/stream-tee.js +8 -5
- package/dist/util/transcript-tail.d.ts +4 -1
- package/dist/util/transcript-tail.js +4 -1
- package/dist/util/version.d.ts +8 -3
- package/dist/util/version.js +8 -3
- package/dist/util/write-budget.d.ts +7 -2
- package/dist/util/write-budget.js +5 -2
- package/dist/util/yaml.d.ts +4 -1
- package/dist/util/yaml.js +4 -1
- package/extensions/openclaw-plugin/openclaw.plugin.json +1 -1
- package/extensions/openclaw-plugin/package.json +1 -1
- package/openclaw.plugin.json +1 -1
- package/package.json +2 -1
- package/scripts/postinstall.cjs +3 -1
- package/dist/api/cards.d.ts +0 -42
- package/dist/api/conflicts.d.ts +0 -28
- package/dist/api/conflicts.js +0 -61
- package/dist/api/dormant.d.ts +0 -14
- package/dist/api/dormant.js +0 -58
- package/dist/api/goals.d.ts +0 -18
- package/dist/api/graph.d.ts +0 -8
- package/dist/api/graph.js +0 -8
- package/dist/api/learn.js +0 -125
- package/dist/api/memories.d.ts +0 -25
- package/dist/api/objects.d.ts +0 -9
- package/dist/api/outcome.d.ts +0 -19
- package/dist/api/predictions.d.ts +0 -11
- package/dist/api/promote.d.ts +0 -36
- package/dist/api/recall-core.d.ts +0 -4
- package/dist/api/recall-core.js +0 -125
- package/dist/api/recall-finish.d.ts +0 -53
- package/dist/api/recall-finish.js +0 -30
- package/dist/api/recall-history.d.ts +0 -64
- package/dist/api/recall-history.js +0 -159
- package/dist/api/recall-record.d.ts +0 -43
- package/dist/api/recall-record.js +0 -78
- package/dist/api/recall-request.js +0 -121
- package/dist/api/recall.d.ts +0 -6
- package/dist/api/refine.d.ts +0 -7
- package/dist/api/refine.js +0 -10
- package/dist/api/session-owners.d.ts +0 -4
- package/dist/api/session-owners.js +0 -17
- package/dist/api/sleep-run.d.ts +0 -26
- package/dist/api/sleep.js +0 -11
- package/dist/graph/write.d.ts +0 -14
- package/dist/store/sqlite/busy.d.ts +0 -3
- package/dist/store/sqlite/busy.js +0 -8
- package/dist/store/sqlite/local.d.ts +0 -4
- package/dist/store/sqlite/local.js +0 -8
|
@@ -0,0 +1,64 @@
|
|
|
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 { strengthAblation } from '../../core/ablation.js';
|
|
5
|
+
import { createMemory, calculateStrength } from '../../core/memory.js';
|
|
6
|
+
import { configOf } from '../config-of.js';
|
|
7
|
+
import { canTouchScope, personalScopeOf } from '../../core/recall-scope.js';
|
|
8
|
+
/**
|
|
9
|
+
* A tenant's dormant memories (src/store/dormant.ts): what sleep moved out of active memory when `dormant.enabled` is
|
|
10
|
+
* on. Newest first;
|
|
11
|
+
* `opts.query` keeps rows containing every term (case-insensitive). */
|
|
12
|
+
export function listDormant(ctx, opts = {}) {
|
|
13
|
+
return ctx.store.dormant.list(ctx.tenantId, personalScopeOf(ctx.actor), opts);
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Restores a dormant memory as if just recalled, with a full half-life; a row set aside by audit repair returns
|
|
17
|
+
* `verified`.
|
|
18
|
+
* Throws if the tenant has no such dormant id or a live memory holds it, and RejectedValueError if the value was since
|
|
19
|
+
* rejected (the dormant copy stays).
|
|
20
|
+
*/
|
|
21
|
+
export async function restoreDormant(ctx, id) {
|
|
22
|
+
const outcome = await ctx.store.dormant.restore(ctx.tenantId, {
|
|
23
|
+
id,
|
|
24
|
+
actor: ctx.actor.subject,
|
|
25
|
+
inReach: (scope) => canTouchScope(ctx.actor, scope),
|
|
26
|
+
revive: (snapshot, now) => reviveSnapshot(ctx, snapshot, now),
|
|
27
|
+
});
|
|
28
|
+
if (outcome.status === 'missing')
|
|
29
|
+
throw new NotFoundError(`dormant memory not found: ${id}`);
|
|
30
|
+
if (outcome.status === 'active') {
|
|
31
|
+
throw new ConflictError(`memory ${id} is already active; forget it before restoring its dormant copy`);
|
|
32
|
+
}
|
|
33
|
+
return outcome.entry;
|
|
34
|
+
}
|
|
35
|
+
function reviveSnapshot(ctx, dormant, now) {
|
|
36
|
+
// A snapshot can predate a field added later: createMemory supplies defaults, then the snapshot overrides every field
|
|
37
|
+
// it carries.
|
|
38
|
+
// The placeholder content only meets createMemory's minimum length, so a legacy row under 3 chars still restores.
|
|
39
|
+
const revived = {
|
|
40
|
+
...createMemory('dormant snapshot defaults', { baseHalfLifeDays: configOf(ctx).defaultHalfLifeDays }),
|
|
41
|
+
...dormant.entry,
|
|
42
|
+
last_retrieved: now.toISOString(),
|
|
43
|
+
};
|
|
44
|
+
if (dormant.reason === 'quality-repair')
|
|
45
|
+
revived.confidence = 'verified';
|
|
46
|
+
return stampOriginProject(ctx.hippoRoot, {
|
|
47
|
+
...revived,
|
|
48
|
+
strength: calculateStrength(revived, now, { ablation: strengthAblation() }),
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Permanently deletes a dormant memory, the explicit "forget it for good"; throws when the tenant has no dormant memory
|
|
53
|
+
* with that id.
|
|
54
|
+
*/
|
|
55
|
+
export async function forgetDormant(ctx, id) {
|
|
56
|
+
const forgotten = await ctx.store.dormant.forget(ctx.tenantId, personalScopeOf(ctx.actor), id, ctx.actor.subject);
|
|
57
|
+
if (!forgotten)
|
|
58
|
+
throw new NotFoundError(`dormant memory not found: ${id}`);
|
|
59
|
+
}
|
|
60
|
+
/** Whether the tenant holds a dormant memory with this id that the caller may touch (for "not found" hints). */
|
|
61
|
+
export function isDormant(ctx, id) {
|
|
62
|
+
return ctx.store.dormant.holds(ctx.tenantId, personalScopeOf(ctx.actor), id);
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=dormant.js.map
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { type InvalidationOptions, type InvalidationResult, type InvalidationTarget } from '
|
|
2
|
-
import type { Context } from '
|
|
1
|
+
import { type InvalidationOptions, type InvalidationResult, type InvalidationTarget } from '../../learn/invalidation.js';
|
|
2
|
+
import type { Context, ContextWith } from '../types.js';
|
|
3
3
|
/** How a surface writes what it learns. */
|
|
4
4
|
export interface LearnProfile {
|
|
5
5
|
readonly tags: readonly string[];
|
|
@@ -28,8 +28,9 @@ export interface LearnResult {
|
|
|
28
28
|
}>;
|
|
29
29
|
}
|
|
30
30
|
/** Learn from `repoPath`'s last `days` of commits into the caller's tenant. Host admin only. */
|
|
31
|
-
export declare function learn(ctx:
|
|
31
|
+
export declare function learn(ctx: ContextWith<'lessonWrites'>, opts: LearnOpts): Promise<LearnResult>;
|
|
32
32
|
export type { InvalidationOptions, InvalidationResult, InvalidationTarget };
|
|
33
|
-
/** `hippo invalidate`: weakens the caller's tenant's memories that
|
|
33
|
+
/** `hippo invalidate`: weakens the caller's tenant's memories that
|
|
34
|
+
* reference `target.from`, or only the one `options.onlyId` names. */
|
|
34
35
|
export declare function invalidateMemories(ctx: Context, target: InvalidationTarget, options: InvalidationOptions): InvalidationResult;
|
|
35
36
|
//# sourceMappingURL=learn.d.ts.map
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
// Git auto-learn: fix/revert/bug commit subjects become memories.
|
|
2
|
+
// `hippo learn`, init, sleep and MCP hippo_learn share it.
|
|
3
|
+
import { ForbiddenError } from '../../core/api-errors.js';
|
|
4
|
+
import { fetchGitLog, extractLessons, partitionLessons, isGitRepo } from '../../learn/autolearn.js';
|
|
5
|
+
import { configOf } from '../config-of.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 { duplicateKey, longestWord, storedTextKeys } from '../../util/same-text.js';
|
|
12
|
+
// SHORTCUT: two profiles keep each surface's rows as they were; fold MCP onto the CLI profile once it may invalidate.
|
|
13
|
+
export const CLI_LEARN = Object.freeze({
|
|
14
|
+
tags: Object.freeze(['error', 'git-learned']),
|
|
15
|
+
source: 'git-learn',
|
|
16
|
+
full: true,
|
|
17
|
+
});
|
|
18
|
+
export const MCP_LEARN = Object.freeze({
|
|
19
|
+
tags: Object.freeze(['git-learned']),
|
|
20
|
+
source: 'git',
|
|
21
|
+
full: false,
|
|
22
|
+
});
|
|
23
|
+
/** Learn from `repoPath`'s last `days` of commits into the caller's tenant. Host admin only. */
|
|
24
|
+
export async function learn(ctx, opts) {
|
|
25
|
+
// It reads the host's own git history, which belongs to the host, not to the caller's tenant.
|
|
26
|
+
if (!ctx.actor.hostAdmin)
|
|
27
|
+
throw new ForbiddenError('hippo_learn requires a host admin');
|
|
28
|
+
const none = { added: 0, skipped: 0, rejected: 0, lowInfo: 0, invalidations: [] };
|
|
29
|
+
if (!isGitRepo(opts.repoPath))
|
|
30
|
+
return { status: 'not-a-repo', ...none };
|
|
31
|
+
const gitLog = fetchGitLog(opts.repoPath, opts.days);
|
|
32
|
+
if (!gitLog.trim())
|
|
33
|
+
return { status: 'no-commits', ...none };
|
|
34
|
+
const config = configOf(ctx);
|
|
35
|
+
const parsed = extractLessons(gitLog, config.gitLearnPatterns);
|
|
36
|
+
if (parsed.length === 0)
|
|
37
|
+
return { status: 'no-lessons', ...none };
|
|
38
|
+
// The gate filters the loop input, so a dropped lesson neither stores nor invalidates; docs/decisions
|
|
39
|
+
// git-learn-gate-placement says why.
|
|
40
|
+
const { kept, dropped } = partitionLessons(parsed);
|
|
41
|
+
return { status: 'scanned', lowInfo: dropped.length, ...await writeLessons(ctx, kept, opts, config) };
|
|
42
|
+
}
|
|
43
|
+
/** Writes `queued` in one transaction; a refused lesson is dropped from `live` and `keys` and must not abort the rest
|
|
44
|
+
* of the git-log scan. */
|
|
45
|
+
async function landLessons(batch, queued) {
|
|
46
|
+
if (queued.length === 0)
|
|
47
|
+
return;
|
|
48
|
+
const { ctx, writes, live, keys, counts } = batch;
|
|
49
|
+
const written = new Set(await writes.writeSkippingRejected(queued.map((q) => q.entry), ctx.actor.subject));
|
|
50
|
+
const landed = [];
|
|
51
|
+
for (const { entry, key } of queued) {
|
|
52
|
+
if (written.has(entry.id)) {
|
|
53
|
+
landed.push(entry);
|
|
54
|
+
continue;
|
|
55
|
+
}
|
|
56
|
+
counts.rejected++;
|
|
57
|
+
keys.delete(key);
|
|
58
|
+
const at = live.indexOf(entry);
|
|
59
|
+
if (at !== -1)
|
|
60
|
+
live.splice(at, 1);
|
|
61
|
+
}
|
|
62
|
+
counts.added += landed.length;
|
|
63
|
+
if (!batch.full)
|
|
64
|
+
return;
|
|
65
|
+
if (landed.length > 0)
|
|
66
|
+
await writes.bumpRemembered(landed.length);
|
|
67
|
+
for (const entry of landed)
|
|
68
|
+
void embedMemory(ctx.hippoRoot, entry, undefined, ctx.store);
|
|
69
|
+
}
|
|
70
|
+
/** The duplicate keys a batch skips: every readable row's with
|
|
71
|
+
* `existing`, else only the rows holding a lesson's longest word. */
|
|
72
|
+
async function knownKeys(ctx, writes, lessons, existing) {
|
|
73
|
+
return storedTextKeys(existing ?? (await writes.textsHoldingWords(ctx.tenantId, lessons.map(longestWord), personalScopeOf(ctx.actor))));
|
|
74
|
+
}
|
|
75
|
+
function newLessonMemory(lesson, profile, inputs) {
|
|
76
|
+
const { tenantId, config, fitSource, pathTags } = inputs;
|
|
77
|
+
const entry = createMemory(lesson, {
|
|
78
|
+
layer: Layer.Episodic,
|
|
79
|
+
tags: [...profile.tags],
|
|
80
|
+
source: profile.source,
|
|
81
|
+
confidence: 'observed',
|
|
82
|
+
schemaFit: fitSource && schemaFitFrom(lesson, [...profile.tags], fitSource),
|
|
83
|
+
tenantId,
|
|
84
|
+
baseHalfLifeDays: config.defaultHalfLifeDays,
|
|
85
|
+
});
|
|
86
|
+
for (const tag of pathTags)
|
|
87
|
+
if (!entry.tags.includes(tag))
|
|
88
|
+
entry.tags.push(tag);
|
|
89
|
+
return entry;
|
|
90
|
+
}
|
|
91
|
+
async function writeLessons(ctx, lessons, opts, config) {
|
|
92
|
+
const { tenantId } = ctx;
|
|
93
|
+
const { profile } = opts;
|
|
94
|
+
const store = ctx.store;
|
|
95
|
+
const writes = store.lessonWrites;
|
|
96
|
+
// One read serves the batch: invalidation matches against `live`,
|
|
97
|
+
// which follows every write below, as a reload per lesson did.
|
|
98
|
+
const live = profile.full ? await writes.tenantEntries(tenantId) : [];
|
|
99
|
+
// Schema fit needs every row; without it, only rows holding a lesson's longest word can be its copy. Learn is
|
|
100
|
+
// host-admin only, so both read what an admin can.
|
|
101
|
+
const existing = profile.full ? live.filter((e) => e.scope == null || canReadScope(ctx.actor, e.scope)) : undefined;
|
|
102
|
+
// Each lesson is scored against `existing` as it was before the batch, so its tag counts and texts are read once.
|
|
103
|
+
const fitSource = existing && schemaFitSourceOf(existing);
|
|
104
|
+
const batch = {
|
|
105
|
+
ctx, writes, live, keys: await knownKeys(ctx, writes, lessons, existing), full: profile.full,
|
|
106
|
+
counts: { added: 0, skipped: 0, rejected: 0, invalidations: [] },
|
|
107
|
+
};
|
|
108
|
+
const pathTags = profile.full ? extractPathTags(opts.repoPath) : [];
|
|
109
|
+
// Lessons queue and land in one transaction; an invalidation reads the store, so it flushes the queue first.
|
|
110
|
+
const queue = [];
|
|
111
|
+
for (const lesson of lessons) {
|
|
112
|
+
const key = duplicateKey(lesson);
|
|
113
|
+
if (batch.keys.has(key)) {
|
|
114
|
+
batch.counts.skipped++;
|
|
115
|
+
continue;
|
|
116
|
+
}
|
|
117
|
+
const target = profile.full ? extractInvalidationTarget(lesson) : null;
|
|
118
|
+
if (target) {
|
|
119
|
+
await landLessons(batch, queue.splice(0));
|
|
120
|
+
const { invalidated } = await invalidateMatchingAmong(store, live, target, tenantId);
|
|
121
|
+
if (invalidated > 0)
|
|
122
|
+
batch.counts.invalidations.push({ from: target.from, count: invalidated });
|
|
123
|
+
}
|
|
124
|
+
const entry = newLessonMemory(lesson, profile, { tenantId, config, fitSource, pathTags });
|
|
125
|
+
queue.push({ entry, key });
|
|
126
|
+
if (profile.full)
|
|
127
|
+
live.push(entry);
|
|
128
|
+
batch.keys.add(key);
|
|
129
|
+
}
|
|
130
|
+
await landLessons(batch, queue.splice(0));
|
|
131
|
+
return batch.counts;
|
|
132
|
+
}
|
|
133
|
+
/** `hippo invalidate`: weakens the caller's tenant's memories that
|
|
134
|
+
* reference `target.from`, or only the one `options.onlyId` names. */
|
|
135
|
+
export function invalidateMemories(ctx, target, options) {
|
|
136
|
+
return invalidateMatching(ctx.hippoRoot, target, ctx.tenantId, options);
|
|
137
|
+
}
|
|
138
|
+
//# sourceMappingURL=learn.js.map
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { auditMemories } from '../../core/memory-audit.js';
|
|
2
|
+
import { autoShare } from '../../sharing/share.js';
|
|
3
|
+
import { runConsolidation } from '../../consolidate/sleep.js';
|
|
4
|
+
import { loadConfig } from '../../core/config.js';
|
|
5
|
+
import { deduplicateStore } from '../../consolidate/dedupe.js';
|
|
6
|
+
import { computeAmbientState } from '../../core/ambient.js';
|
|
7
|
+
import { type ExtractResult } from '../../graph/extract.js';
|
|
8
|
+
import type { MemoryEntry } from '../../core/memory.js';
|
|
9
|
+
import type { ContextWith } from '../types.js';
|
|
10
|
+
import type { Consolidation, Objects } from '../../store/port.js';
|
|
11
|
+
import type { SleepOpts, SleepResult } from './sleep.js';
|
|
12
|
+
/** Test-only seam: `runSleep` overrides force a phase to throw into emitSleepAudit's `partial: true` row; production
|
|
13
|
+
* never sets them. */
|
|
14
|
+
export interface SleepPhases {
|
|
15
|
+
consolidate: typeof runConsolidation;
|
|
16
|
+
deduplicateStore: typeof deduplicateStore;
|
|
17
|
+
auditMemories: typeof auditMemories;
|
|
18
|
+
autoShare: typeof autoShare;
|
|
19
|
+
loadAllEntries: (store: Consolidation) => MemoryEntry[];
|
|
20
|
+
computeAmbientState: typeof computeAmbientState;
|
|
21
|
+
loadConfig: typeof loadConfig;
|
|
22
|
+
loadPendingExtractionTenants: (store: Consolidation) => DirtyTenantSnapshot['dirtyTenants'];
|
|
23
|
+
extractGraph: (objects: Objects, hippoRoot: string, tenantId: string) => ExtractResult | Promise<ExtractResult>;
|
|
24
|
+
}
|
|
25
|
+
interface DirtyTenantSnapshot {
|
|
26
|
+
dirtyTenants: {
|
|
27
|
+
tenantId: string;
|
|
28
|
+
maxPendingId: number;
|
|
29
|
+
}[];
|
|
30
|
+
error: string | null;
|
|
31
|
+
}
|
|
32
|
+
/** The groups one sleep runs on: hippo.db's own files, the audit pass and the graph's objects. */
|
|
33
|
+
type SleepContext = ContextWith<'auditMaintenance' | 'objects' | 'localFiles'>;
|
|
34
|
+
/** `sleep` with its phase dependencies overridable; tests pass
|
|
35
|
+
* stubs here, so the seam never touches the public `SleepOpts`. */
|
|
36
|
+
export declare function runSleep(ctx: SleepContext, opts: SleepOpts, overrides?: Partial<SleepPhases>): Promise<SleepResult>;
|
|
37
|
+
export {};
|
|
38
|
+
//# sourceMappingURL=sleep-run.d.ts.map
|
|
@@ -1,62 +1,63 @@
|
|
|
1
1
|
// The sleep pipeline behind `sleep`, with its phase dependencies injectable; kept out of the package root.
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
12
|
-
import { computeAmbientState } from '../core/ambient.js';
|
|
13
|
-
import { loadPendingExtractionTenants, markPendingProcessedUpTo } from '../store/graph-queue.js';
|
|
14
|
-
import { extractGraphChunked } from '../graph/extract.js';
|
|
15
|
-
import { removeAuditErrors } from './audit.js';
|
|
16
|
-
import { errorMessage } from '../util/log.js';
|
|
2
|
+
import { auditMemories } from '../../core/memory-audit.js';
|
|
3
|
+
import { AUTO_SHARE_MIN_SCORE, autoShare } from '../../sharing/share.js';
|
|
4
|
+
import { runConsolidation } from '../../consolidate/sleep.js';
|
|
5
|
+
import { loadConfig } from '../../core/config.js';
|
|
6
|
+
import { deduplicateStore } from '../../consolidate/dedupe.js';
|
|
7
|
+
import { computeAmbientState } from '../../core/ambient.js';
|
|
8
|
+
import { extractGraphChunked } from '../../graph/extract.js';
|
|
9
|
+
import { objectsOf } from '../objects/objects.js';
|
|
10
|
+
import { removeAuditErrors } from '../auth/audit.js';
|
|
11
|
+
import { errorMessage } from '../../util/log.js';
|
|
17
12
|
const DEFAULT_SLEEP_PHASES = {
|
|
18
|
-
consolidate,
|
|
13
|
+
consolidate: runConsolidation,
|
|
19
14
|
deduplicateStore,
|
|
20
15
|
auditMemories,
|
|
21
16
|
autoShare,
|
|
22
|
-
loadAllEntries,
|
|
17
|
+
loadAllEntries: (store) => store.allEntries(),
|
|
23
18
|
computeAmbientState,
|
|
24
19
|
loadConfig,
|
|
25
|
-
loadPendingExtractionTenants,
|
|
20
|
+
loadPendingExtractionTenants: (store) => store.dirtyGraphTenants(),
|
|
26
21
|
extractGraph: extractGraphChunked,
|
|
27
22
|
};
|
|
28
|
-
/** `sleep` with its phase dependencies overridable; tests pass
|
|
23
|
+
/** `sleep` with its phase dependencies overridable; tests pass
|
|
24
|
+
* stubs here, so the seam never touches the public `SleepOpts`. */
|
|
29
25
|
export async function runSleep(ctx, opts, overrides = {}) {
|
|
30
26
|
const dryRun = Boolean(opts.dryRun);
|
|
31
27
|
const phases = { ...DEFAULT_SLEEP_PHASES, ...overrides };
|
|
32
|
-
// Phase counters for the consolidate audit emit (in finally), accumulated per phase so a partial failure still
|
|
28
|
+
// Phase counters for the consolidate audit emit (in finally), accumulated per phase so a partial failure still
|
|
29
|
+
// reports what got done.
|
|
33
30
|
const counts = { consolidation: 0, dedup: 0, auditDeleted: 0, ambient: 0 };
|
|
34
31
|
let phaseError = null;
|
|
35
32
|
try {
|
|
36
33
|
return await runSleepPhases(ctx, opts, phases, counts);
|
|
37
34
|
}
|
|
38
35
|
catch (err) {
|
|
39
|
-
// SAFETY: phaseError is only read via phaseError.message / (phaseError !== null) below, safe even if a non-Error
|
|
40
|
-
// this mirrors the lenient (err as Error) pattern used through this catch chain.
|
|
36
|
+
// SAFETY: phaseError is only read via phaseError.message / (phaseError !== null) below, safe even if a non-Error
|
|
37
|
+
// was thrown; this mirrors the lenient (err as Error) pattern used through this catch chain.
|
|
41
38
|
phaseError = err;
|
|
42
39
|
throw err;
|
|
43
40
|
}
|
|
44
41
|
finally {
|
|
45
|
-
emitSleepAudit(ctx, opts, dryRun, counts, phaseError);
|
|
42
|
+
await emitSleepAudit(ctx, opts, dryRun, counts, phaseError);
|
|
46
43
|
}
|
|
47
44
|
}
|
|
48
45
|
async function runSleepPhases(ctx, opts, phases, counts) {
|
|
49
46
|
const dryRun = Boolean(opts.dryRun);
|
|
50
47
|
const snapshot = snapshotDirtyTenants(ctx, phases, dryRun);
|
|
51
48
|
// Phase 1: Consolidation.
|
|
52
|
-
const
|
|
49
|
+
const local = ctx.store.localFiles;
|
|
50
|
+
const consolidateResult = await phases.consolidate(local, { dryRun });
|
|
53
51
|
counts.consolidation = consolidateResult.semanticCreated + consolidateResult.merged;
|
|
54
52
|
const result = sleepResultFrom(consolidateResult, dryRun);
|
|
55
|
-
// Consolidate's own read predates its writes, so it cannot stand in for this one.
|
|
56
|
-
//
|
|
57
|
-
const loaded = {
|
|
53
|
+
// Consolidate's own read predates its writes, so it cannot stand in for this one. One read after consolidation serves
|
|
54
|
+
// dedup, the audit and ambient: dedup reports every row it deletes, so later phases subtract.
|
|
55
|
+
const loaded = {
|
|
56
|
+
entries: phases.loadAllEntries(local.consolidation),
|
|
57
|
+
backing: local.consolidation.objectBackedIds(),
|
|
58
|
+
};
|
|
58
59
|
// Phase 2: Dedup (post-consolidate near-duplicate cleanup).
|
|
59
|
-
const dedupResult = phases.deduplicateStore(
|
|
60
|
+
const dedupResult = phases.deduplicateStore(local.consolidation, { dryRun, actor: ctx.actor.subject, loaded });
|
|
60
61
|
counts.dedup = dedupResult.removed;
|
|
61
62
|
if (dedupResult.removed > 0)
|
|
62
63
|
result.deduped = dedupSummary(dedupResult);
|
|
@@ -79,7 +80,7 @@ function snapshotDirtyTenants(ctx, phases, dryRun) {
|
|
|
79
80
|
const snapshot = { dirtyTenants: [], error: null };
|
|
80
81
|
if (!dryRun) {
|
|
81
82
|
try {
|
|
82
|
-
snapshot.dirtyTenants = phases.loadPendingExtractionTenants(ctx.
|
|
83
|
+
snapshot.dirtyTenants = phases.loadPendingExtractionTenants(ctx.store.localFiles.consolidation);
|
|
83
84
|
}
|
|
84
85
|
catch (snapErr) {
|
|
85
86
|
snapshot.error = errorMessage(snapErr);
|
|
@@ -117,11 +118,16 @@ function dedupSummary(dedupResult) {
|
|
|
117
118
|
crossDups,
|
|
118
119
|
};
|
|
119
120
|
}
|
|
120
|
-
/** `removed` counts audit errors deleted (or that would be under dryRun); `remaining` is what the audit read, less the
|
|
121
|
+
/** `removed` counts audit errors deleted (or that would be under dryRun); `remaining` is what the audit read, less the
|
|
122
|
+
* rows it deleted. */
|
|
121
123
|
async function runQualityAudit(ctx, phases, options) {
|
|
122
124
|
const { dryRun, consolidateResult, dedupResult, result, loaded } = options;
|
|
123
|
-
// The load followed consolidation, so only a dry run still holds the rows consolidation would remove; dedup's pairs
|
|
124
|
-
|
|
125
|
+
// The load followed consolidation, so only a dry run still holds the rows consolidation would remove; dedup's pairs
|
|
126
|
+
// are gone or would be.
|
|
127
|
+
const planned = new Set([
|
|
128
|
+
...(dryRun ? (consolidateResult.removedIds ?? []) : []),
|
|
129
|
+
...dedupResult.pairs.map((p) => p.removed),
|
|
130
|
+
]);
|
|
125
131
|
const allEntries = loaded.entries.filter((e) => !planned.has(e.id));
|
|
126
132
|
const auditOut = phases.auditMemories(allEntries, loaded.backing);
|
|
127
133
|
if (auditOut.issues.length === 0)
|
|
@@ -140,7 +146,7 @@ async function runQualityAudit(ctx, phases, options) {
|
|
|
140
146
|
return { removed, remaining: allEntries.filter((e) => !deleted.has(e.id)) };
|
|
141
147
|
}
|
|
142
148
|
function shareOnSleep(ctx, phases, result) {
|
|
143
|
-
const sleepConfig = phases.loadConfig(ctx.hippoRoot);
|
|
149
|
+
const sleepConfig = ctx.config ?? phases.loadConfig(ctx.hippoRoot);
|
|
144
150
|
if (!sleepConfig.autoShareOnSleep)
|
|
145
151
|
return;
|
|
146
152
|
// Both skip counters are surfaced so the secret veto and the rejection tombstone are observable, not silent.
|
|
@@ -158,7 +164,7 @@ function shareOnSleep(ctx, phases, result) {
|
|
|
158
164
|
}
|
|
159
165
|
/** Returns the ambient total the audit row reports: 0 when ambient is off or no current row is left. */
|
|
160
166
|
function summarizeAmbient(ctx, phases, result, loaded) {
|
|
161
|
-
const postSleepConfig = phases.loadConfig(ctx.hippoRoot);
|
|
167
|
+
const postSleepConfig = ctx.config ?? phases.loadConfig(ctx.hippoRoot);
|
|
162
168
|
if (!postSleepConfig.ambient.enabled)
|
|
163
169
|
return 0;
|
|
164
170
|
const postSleepEntries = loaded.filter((e) => !e.superseded_by);
|
|
@@ -194,10 +200,11 @@ async function drainGraphQueue(ctx, phases, snapshot, result) {
|
|
|
194
200
|
];
|
|
195
201
|
}
|
|
196
202
|
}
|
|
197
|
-
/** Rebuilds one dirty tenant's graph into `rebuilt` and drains its
|
|
203
|
+
/** Rebuilds one dirty tenant's graph into `rebuilt` and drains its
|
|
204
|
+
* queue; a failure is a detail line and the tenant stays pending. */
|
|
198
205
|
async function rebuildDirtyTenant(ctx, phases, dirty, rebuilt, result) {
|
|
199
206
|
try {
|
|
200
|
-
const ext = await phases.extractGraph(ctx.hippoRoot, dirty.tenantId);
|
|
207
|
+
const ext = await phases.extractGraph(objectsOf(ctx), ctx.hippoRoot, dirty.tenantId);
|
|
201
208
|
// Count the rebuild as soon as it succeeds — it happened regardless of
|
|
202
209
|
// the drain-mark below.
|
|
203
210
|
rebuilt.tenants += 1;
|
|
@@ -211,7 +218,7 @@ async function rebuildDirtyTenant(ctx, phases, dirty, rebuilt, result) {
|
|
|
211
218
|
}
|
|
212
219
|
// Watermark drain: only items enqueued before this rebuild started are marked; later arrivals stay pending.
|
|
213
220
|
// Marked only after the last chunk, so a run stopped between chunks leaves the tenant for the next one.
|
|
214
|
-
|
|
221
|
+
ctx.store.localFiles.consolidation.markGraphDrained(dirty.tenantId, dirty.maxPendingId);
|
|
215
222
|
}
|
|
216
223
|
catch (tenantErr) {
|
|
217
224
|
result.details = [
|
|
@@ -221,8 +228,8 @@ async function rebuildDirtyTenant(ctx, phases, dirty, rebuilt, result) {
|
|
|
221
228
|
}
|
|
222
229
|
}
|
|
223
230
|
// One 'consolidate' row per sleep, emitted from finally so a partial failure still reports what got done.
|
|
224
|
-
//
|
|
225
|
-
function emitSleepAudit(ctx, opts, dryRun, counts, phaseError) {
|
|
231
|
+
// An audit failure is logged and never replaces the original phase error.
|
|
232
|
+
async function emitSleepAudit(ctx, opts, dryRun, counts, phaseError) {
|
|
226
233
|
try {
|
|
227
234
|
// Tagged '__host__' because sleep is host-wide; the actor still names the operator who ran it.
|
|
228
235
|
const sleepAuditMetadata = {
|
|
@@ -237,11 +244,12 @@ function emitSleepAudit(ctx, opts, dryRun, counts, phaseError) {
|
|
|
237
244
|
};
|
|
238
245
|
if (phaseError)
|
|
239
246
|
sleepAuditMetadata.errorMessage = phaseError.message;
|
|
240
|
-
// A flush stopped between chunks names the unit it would have
|
|
241
|
-
|
|
247
|
+
// A flush stopped between chunks names the unit it would have
|
|
248
|
+
// committed next, so a unit that fails every night can be found.
|
|
249
|
+
const nextUnitIds = ctx.store.localFiles.consolidation.failedUnitOf(phaseError);
|
|
242
250
|
if (nextUnitIds)
|
|
243
251
|
sleepAuditMetadata.nextUnitIds = nextUnitIds;
|
|
244
|
-
|
|
252
|
+
await ctx.store.appendAuditEvents([{
|
|
245
253
|
tenantId: '__host__',
|
|
246
254
|
actor: ctx.actor.subject,
|
|
247
255
|
op: 'consolidate',
|
|
@@ -250,7 +258,7 @@ function emitSleepAudit(ctx, opts, dryRun, counts, phaseError) {
|
|
|
250
258
|
}
|
|
251
259
|
catch (auditErr) {
|
|
252
260
|
// Logged, never thrown: a second failure must not mask the original phaseError.
|
|
253
|
-
|
|
261
|
+
ctx.store.localFiles.consolidation.reportAuditFailure('consolidate', String(auditErr));
|
|
254
262
|
}
|
|
255
263
|
}
|
|
256
264
|
//# sourceMappingURL=sleep-run.js.map
|
|
@@ -1,8 +1,10 @@
|
|
|
1
|
-
import type { AmbientState } from '
|
|
2
|
-
import type
|
|
3
|
-
/** Options for `sleep`, one consolidation cycle on a SQLite store that returns counts; unlike `hippo sleep` it skips
|
|
1
|
+
import type { AmbientState } from '../../core/ambient.js';
|
|
2
|
+
import { type ContextWith } from '../types.js';
|
|
3
|
+
/** Options for `sleep`, one consolidation cycle on a SQLite store that returns counts; unlike `hippo sleep` it skips
|
|
4
|
+
* the auto-learn step. */
|
|
4
5
|
export interface SleepOpts {
|
|
5
|
-
/** Report what a sleep would change without applying it; sharing,
|
|
6
|
+
/** Report what a sleep would change without applying it; sharing,
|
|
7
|
+
* the ambient summary and the graph refresh are skipped. */
|
|
6
8
|
dryRun?: boolean;
|
|
7
9
|
/** Skip copying high-scoring memories to the global store under `HIPPO_HOME`. Default
|
|
8
10
|
* false, so every tenant's memories are eligible; multi-tenant callers pass `true`. */
|
|
@@ -11,10 +13,11 @@ export interface SleepOpts {
|
|
|
11
13
|
export interface SleepResult {
|
|
12
14
|
active: number;
|
|
13
15
|
removed: number;
|
|
14
|
-
/** Faded memories the decay pass moved to the dormant store instead of deleting (config `dormant.enabled`); absent
|
|
15
|
-
* `removed`. */
|
|
16
|
+
/** Faded memories the decay pass moved to the dormant store instead of deleting (config `dormant.enabled`); absent
|
|
17
|
+
* when 0. Per-invocation counter, like `removed`. */
|
|
16
18
|
dormant?: number;
|
|
17
|
-
/** Dormant memories deleted for good this sleep for outliving `dormant.retentionDays`; absent when 0. Per-invocation
|
|
19
|
+
/** Dormant memories deleted for good this sleep for outliving `dormant.retentionDays`; absent when 0. Per-invocation
|
|
20
|
+
* counter, like `removed`. */
|
|
18
21
|
dormantExpired?: number;
|
|
19
22
|
mergedEpisodic: number;
|
|
20
23
|
newSemantic: number;
|
|
@@ -30,9 +33,11 @@ export interface SleepResult {
|
|
|
30
33
|
warningCount: number;
|
|
31
34
|
};
|
|
32
35
|
shared?: number;
|
|
33
|
-
/** Memories the auto-share secret veto withheld: rows that passed every other gate but `detectSecret`; absent when 0
|
|
36
|
+
/** Memories the auto-share secret veto withheld: rows that passed every other gate but `detectSecret`; absent when 0
|
|
37
|
+
* or auto-share did not run. */
|
|
34
38
|
secretSkipped?: number;
|
|
35
|
-
/** Auto-share candidates the GLOBAL store's rejection tombstone refused (one must not abort the batch); absent when 0
|
|
39
|
+
/** Auto-share candidates the GLOBAL store's rejection tombstone refused (one must not abort the batch); absent when 0
|
|
40
|
+
* or auto-share did not run. */
|
|
36
41
|
rejectedSkipped?: number;
|
|
37
42
|
ambient?: AmbientState | null;
|
|
38
43
|
/** Graph re-extraction totals across tenants rebuilt this sleep; absent when none was dirty or under dryRun.
|
|
@@ -44,6 +49,7 @@ export interface SleepResult {
|
|
|
44
49
|
};
|
|
45
50
|
details?: string[];
|
|
46
51
|
}
|
|
47
|
-
/** Sleeps the WHOLE hippoRoot, every tenant, so /v1/sleep stays loopback-only; SQLite only; never auto-deletes pinned,
|
|
48
|
-
|
|
52
|
+
/** Sleeps the WHOLE hippoRoot, every tenant, so /v1/sleep stays loopback-only; SQLite only; never auto-deletes pinned,
|
|
53
|
+
* raw, kept or object-backing rows. */
|
|
54
|
+
export declare function sleep(ctx: ContextWith<'localFiles'>, opts?: SleepOpts): Promise<SleepResult>;
|
|
49
55
|
//# sourceMappingURL=sleep.d.ts.map
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
// The sleep cycle: decay, consolidation, dedupe, graph extraction and the other maintenance passes.
|
|
2
|
+
import { narrowContext } from '../types.js';
|
|
3
|
+
import { runSleep } from './sleep-run.js';
|
|
4
|
+
/** Sleeps the WHOLE hippoRoot, every tenant, so /v1/sleep stays loopback-only; SQLite only; never auto-deletes pinned,
|
|
5
|
+
* raw, kept or object-backing rows. */
|
|
6
|
+
export async function sleep(ctx, opts = {}) {
|
|
7
|
+
return runSleep(narrowContext(ctx, 'auditMaintenance', 'objects', 'localFiles'), opts);
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=sleep.js.map
|
package/dist/api/status.d.ts
CHANGED
|
@@ -13,7 +13,9 @@ export interface StoreStatus {
|
|
|
13
13
|
export declare function storeStatus(ctx: Context, now: Date, atRiskBelow: number): StoreStatus;
|
|
14
14
|
/** Ids and dimension of the stored vectors. Every tenant, so the host admin only. */
|
|
15
15
|
export declare function vectorSummary(ctx: Context): StoredVectorSummary;
|
|
16
|
-
/**
|
|
16
|
+
/**
|
|
17
|
+
* Whether the stored vectors were built by a different model than `providerId`. Every tenant, so the host admin only.
|
|
18
|
+
*/
|
|
17
19
|
export declare function embeddingReindexNeeded(ctx: Context, providerId: string): boolean;
|
|
18
20
|
/** Every stored physics particle. Every tenant, so the host admin only. */
|
|
19
21
|
export declare function storedParticles(ctx: Context): PhysicsParticle[];
|
package/dist/api/status.js
CHANGED
|
@@ -17,7 +17,9 @@ export function vectorSummary(ctx) {
|
|
|
17
17
|
requireHostAdmin(ctx, 'Reading every tenant');
|
|
18
18
|
return storedVectorSummary(ctx.hippoRoot);
|
|
19
19
|
}
|
|
20
|
-
/**
|
|
20
|
+
/**
|
|
21
|
+
* Whether the stored vectors were built by a different model than `providerId`. Every tenant, so the host admin only.
|
|
22
|
+
*/
|
|
21
23
|
export function embeddingReindexNeeded(ctx, providerId) {
|
|
22
24
|
requireHostAdmin(ctx, 'Reading every tenant');
|
|
23
25
|
return embeddingModelRequiresReindex(ctx.hippoRoot, providerId);
|
package/dist/api/store-init.d.ts
CHANGED
|
@@ -1,4 +1,7 @@
|
|
|
1
1
|
import { type Context } from './types.js';
|
|
2
|
-
/**
|
|
2
|
+
/**
|
|
3
|
+
* Create the store at `ctx.hippoRoot`, or finish setting up one that exists; a store holds every tenant, so the host
|
|
4
|
+
* admin only.
|
|
5
|
+
*/
|
|
3
6
|
export declare function initMemoryStore(ctx: Context): void;
|
|
4
7
|
//# sourceMappingURL=store-init.d.ts.map
|
package/dist/api/store-init.js
CHANGED
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
// Creating a store for `hippo init`: the database, its mirror folders and first-run setup.
|
|
2
2
|
import { initStore } from '../store/open.js';
|
|
3
3
|
import { requireHostAdmin } from './types.js';
|
|
4
|
-
/**
|
|
4
|
+
/**
|
|
5
|
+
* Create the store at `ctx.hippoRoot`, or finish setting up one that exists; a store holds every tenant, so the host
|
|
6
|
+
* admin only.
|
|
7
|
+
*/
|
|
5
8
|
export function initMemoryStore(ctx) {
|
|
6
9
|
requireHostAdmin(ctx, 'Creating a store');
|
|
7
10
|
initStore(ctx.hippoRoot);
|
package/dist/api/tokens.d.ts
CHANGED
|
@@ -1,19 +1,20 @@
|
|
|
1
1
|
import type { TokenSummary, TokenSurface } from '../store/token-ledger.js';
|
|
2
2
|
import type { FailureSummary } from '../store/failure-log.js';
|
|
3
|
-
import type {
|
|
4
|
-
/** Records memory text handed to an agent in the token ledger. Best-effort: never throws, since a ledger failure must
|
|
5
|
-
|
|
3
|
+
import type { ContextWith, StoreContext } from './types.js';
|
|
4
|
+
/** Records memory text handed to an agent in the token ledger. Best-effort: never throws, since a ledger failure must
|
|
5
|
+
* not fail the recall or context call. */
|
|
6
|
+
export declare function recordTokens(ctx: StoreContext, surface: TokenSurface, use: {
|
|
6
7
|
items: number;
|
|
7
8
|
tokens: number;
|
|
8
9
|
sessionId?: string | null;
|
|
9
10
|
}): Promise<void>;
|
|
10
|
-
/** Token ledger totals for the tenant over the last `days` days (default 30): tokens sent, skipped as unchanged and
|
|
11
|
-
* per surface, with session counts and mean tokens per session. */
|
|
12
|
-
export declare function tokenSummary(ctx:
|
|
11
|
+
/** Token ledger totals for the tenant over the last `days` days (default 30): tokens sent, skipped as unchanged and
|
|
12
|
+
* re-read, per surface, with session counts and mean tokens per session. */
|
|
13
|
+
export declare function tokenSummary(ctx: ContextWith<'reports'>, opts?: {
|
|
13
14
|
days?: number;
|
|
14
|
-
}): TokenSummary
|
|
15
|
+
}): Promise<TokenSummary>;
|
|
15
16
|
/** Failed tool calls by outcome, and repeats across sessions, over the last `days` days (default 30). */
|
|
16
|
-
export declare function failureSummary(ctx:
|
|
17
|
+
export declare function failureSummary(ctx: ContextWith<'reports'>, opts?: {
|
|
17
18
|
days?: number;
|
|
18
|
-
}): FailureSummary
|
|
19
|
+
}): Promise<FailureSummary>;
|
|
19
20
|
//# sourceMappingURL=tokens.d.ts.map
|