hippo-memory 1.70.0 → 1.72.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 +2 -2
- package/dist/agent-memories/apply.d.ts +0 -11
- package/dist/agent-memories/apply.js +6 -21
- package/dist/agent-memories/claude-code.d.ts +4 -2
- package/dist/agent-memories/claude-code.js +15 -6
- package/dist/agent-memories/codex.js +1 -1
- package/dist/agent-memories/copilot.d.ts +1 -3
- package/dist/agent-memories/copilot.js +1 -17
- package/dist/agent-memories/files.js +23 -12
- package/dist/agent-memories/markdown.d.ts +1 -3
- package/dist/agent-memories/markdown.js +1 -3
- package/dist/agent-memories/project-folds.d.ts +10 -0
- package/dist/agent-memories/project-folds.js +34 -0
- package/dist/agent-memories/report.js +2 -1
- package/dist/agent-memories/sync.d.ts +4 -2
- package/dist/agent-memories/sync.js +18 -11
- package/dist/api/assemble.d.ts +7 -44
- package/dist/api/assemble.js +3 -23
- package/dist/api/audit.d.ts +33 -1
- package/dist/api/audit.js +48 -1
- package/dist/api/auth.d.ts +20 -26
- package/dist/api/auth.js +43 -29
- package/dist/api/auto-sleep.d.ts +5 -2
- package/dist/api/auto-sleep.js +9 -5
- package/dist/api/availability.d.ts +2 -15
- package/dist/api/availability.js +4 -18
- package/dist/api/cards.d.ts +42 -0
- package/dist/api/cards.js +52 -0
- package/dist/api/conflicts.d.ts +28 -0
- package/dist/api/conflicts.js +61 -0
- package/dist/api/context-render.js +4 -3
- package/dist/api/context-select.js +12 -15
- package/dist/api/context-types.d.ts +10 -35
- package/dist/api/context.d.ts +5 -22
- package/dist/api/context.js +38 -46
- package/dist/api/continuity.d.ts +47 -0
- package/dist/api/continuity.js +66 -0
- package/dist/{cli → api}/correction-latency.d.ts +2 -14
- package/dist/{cli → api}/correction-latency.js +2 -14
- package/dist/api/dormant.d.ts +5 -21
- package/dist/api/dormant.js +11 -28
- package/dist/api/drill-down.d.ts +7 -46
- package/dist/api/drill-down.js +6 -27
- package/dist/api/embeddings.d.ts +17 -0
- package/dist/api/embeddings.js +28 -0
- package/dist/api/error-reply.d.ts +8 -0
- package/dist/api/error-reply.js +21 -0
- package/dist/api/forget.d.ts +11 -26
- package/dist/api/forget.js +23 -35
- package/dist/api/goals.d.ts +1 -1
- package/dist/api/goals.js +5 -9
- package/dist/api/graph.d.ts +8 -0
- package/dist/api/graph.js +7 -0
- package/dist/api/index.d.ts +6 -2
- package/dist/api/index.js +6 -2
- package/dist/api/instruction-detect.js +21 -6
- package/dist/api/learn.d.ts +4 -0
- package/dist/api/learn.js +53 -27
- package/dist/api/ledger-db.d.ts +2 -5
- package/dist/api/ledger-db.js +5 -35
- package/dist/api/memories.d.ts +23 -0
- package/dist/api/memories.js +46 -0
- package/dist/api/objects.d.ts +9 -0
- package/dist/api/objects.js +11 -0
- package/dist/api/on-store.js +5 -3
- package/dist/api/outcome.js +1 -1
- package/dist/api/pilot-arm.d.ts +1 -11
- package/dist/api/pilot-arm.js +5 -45
- package/dist/api/predictions.d.ts +11 -0
- package/dist/api/predictions.js +24 -0
- package/dist/api/projects.d.ts +21 -0
- package/dist/api/projects.js +24 -0
- package/dist/api/promote.d.ts +13 -17
- package/dist/api/promote.js +12 -20
- package/dist/api/prompt-hook.d.ts +19 -6
- package/dist/api/prompt-hook.js +54 -13
- package/dist/api/provenance-coverage.d.ts +14 -0
- package/dist/{cli → api}/provenance-coverage.js +2 -6
- package/dist/api/recall-cli.d.ts +58 -0
- package/dist/api/recall-cli.js +103 -0
- package/dist/api/recall-core.js +17 -9
- package/dist/api/recall-finish.d.ts +53 -0
- package/dist/api/recall-finish.js +30 -0
- package/dist/api/recall-history.d.ts +17 -84
- package/dist/api/recall-history.js +15 -88
- package/dist/api/recall-pipeline.d.ts +2 -3
- package/dist/api/recall-pipeline.js +21 -15
- package/dist/api/recall-request.js +1 -1
- package/dist/api/recall-types.d.ts +64 -304
- package/dist/api/recall.d.ts +3 -34
- package/dist/api/recall.js +63 -89
- package/dist/api/refine.d.ts +7 -0
- package/dist/api/refine.js +10 -0
- package/dist/api/remember-local.d.ts +57 -0
- package/dist/api/remember-local.js +90 -0
- package/dist/api/remember.d.ts +20 -2
- package/dist/api/remember.js +16 -3
- package/dist/api/session-end.d.ts +22 -0
- package/dist/api/session-end.js +101 -0
- package/dist/api/sleep-run.d.ts +2 -4
- package/dist/api/sleep-run.js +28 -28
- package/dist/api/sleep.d.ts +9 -28
- package/dist/api/status.d.ts +24 -0
- package/dist/api/status.js +40 -0
- package/dist/api/store-init.d.ts +4 -0
- package/dist/api/store-init.js +9 -0
- package/dist/api/tokens.d.ts +3 -10
- package/dist/api/tokens.js +4 -11
- package/dist/api/types.d.ts +8 -29
- package/dist/api/types.js +10 -23
- package/dist/capture/caller-session.d.ts +0 -3
- package/dist/capture/caller-session.js +1 -12
- package/dist/capture/capture-error.d.ts +2 -2
- package/dist/capture/capture-error.js +23 -18
- package/dist/capture/codex-patch.js +3 -1
- package/dist/capture/command.d.ts +4 -12
- package/dist/capture/command.js +39 -114
- package/dist/capture/compact.d.ts +4 -15
- package/dist/capture/compact.js +26 -30
- package/dist/capture/compaction-items-caller.js +11 -20
- package/dist/capture/compaction-record.d.ts +7 -93
- package/dist/capture/compaction-record.js +34 -399
- package/dist/capture/compaction-spool.d.ts +5 -3
- package/dist/capture/compaction-spool.js +21 -7
- package/dist/capture/copilot-transcript.d.ts +2 -1
- package/dist/capture/copilot-transcript.js +2 -1
- package/dist/capture/extract.d.ts +5 -2
- package/dist/capture/extract.js +4 -3
- package/dist/capture/failure-caller.d.ts +1 -1
- package/dist/capture/failure-caller.js +21 -16
- package/dist/capture/failure-reading.d.ts +2 -1
- package/dist/capture/failure-reading.js +7 -9
- package/dist/capture/pre-compact-caller.js +5 -4
- package/dist/capture/session-digest.d.ts +1 -1
- package/dist/capture/session-digest.js +17 -10
- package/dist/capture/session-end-caller.js +2 -1
- package/dist/capture/session-worker.js +3 -4
- package/dist/capture/transcript.d.ts +4 -11
- package/dist/capture/transcript.js +10 -21
- package/dist/capture/working-state.d.ts +4 -2
- package/dist/capture/working-state.js +4 -2
- package/dist/cli/api-context.d.ts +3 -0
- package/dist/cli/api-context.js +6 -0
- package/dist/cli/audit-prune.d.ts +1 -59
- package/dist/cli/audit-prune.js +2 -61
- package/dist/cli/audit.d.ts +1 -1
- package/dist/cli/audit.js +42 -43
- package/dist/cli/auth.d.ts +2 -2
- package/dist/cli/auth.js +61 -44
- package/dist/cli/briefs.d.ts +1 -4
- package/dist/cli/briefs.js +42 -301
- package/dist/cli/card.d.ts +2 -2
- package/dist/cli/card.js +63 -56
- package/dist/cli/client.d.ts +12 -27
- package/dist/cli/client.js +41 -44
- package/dist/cli/compact-resume-payload.js +4 -3
- package/dist/cli/context.d.ts +2 -3
- package/dist/cli/context.js +22 -18
- package/dist/cli/continuity.d.ts +6 -6
- package/dist/cli/continuity.js +81 -86
- package/dist/cli/curate.d.ts +13 -17
- package/dist/cli/curate.js +88 -116
- package/dist/cli/dag.d.ts +4 -4
- package/dist/cli/dag.js +55 -34
- package/dist/cli/decisions.d.ts +2 -4
- package/dist/cli/decisions.js +18 -309
- package/dist/cli/eval.d.ts +1 -1
- package/dist/cli/eval.js +27 -26
- package/dist/cli/exit.d.ts +6 -0
- package/dist/cli/exit.js +11 -0
- package/dist/cli/explain.d.ts +2 -3
- package/dist/cli/explain.js +25 -27
- package/dist/cli/flag-values.d.ts +6 -1
- package/dist/cli/flag-values.js +42 -15
- package/dist/cli/flags.d.ts +0 -288
- package/dist/cli/flags.js +3 -138
- package/dist/cli/github.d.ts +14 -0
- package/dist/{connectors/github/cli-impl.js → cli/github.js} +43 -71
- package/dist/cli/goals.d.ts +2 -2
- package/dist/cli/goals.js +46 -50
- package/dist/cli/graph.d.ts +3 -0
- package/dist/cli/graph.js +83 -0
- package/dist/cli/hook-runtime.d.ts +12 -32
- package/dist/cli/hook-runtime.js +21 -64
- package/dist/cli/incidents.d.ts +3 -0
- package/dist/cli/incidents.js +112 -0
- package/dist/cli/init.d.ts +2 -2
- package/dist/cli/init.js +33 -30
- package/dist/cli/install-steps.d.ts +2 -1
- package/dist/cli/install-steps.js +13 -14
- package/dist/cli/last-sleep.d.ts +2 -1
- package/dist/cli/last-sleep.js +4 -1
- package/dist/cli/lenient-id.d.ts +2 -0
- package/dist/cli/lenient-id.js +13 -0
- package/dist/cli/maintenance.d.ts +5 -5
- package/dist/cli/maintenance.js +37 -43
- package/dist/cli/notes.d.ts +2 -0
- package/dist/cli/notes.js +41 -0
- package/dist/cli/object-verbs.js +4 -3
- package/dist/cli/open-browser.d.ts +14 -0
- package/dist/cli/open-browser.js +26 -0
- package/dist/cli/owner-validation.d.ts +5 -28
- package/dist/cli/owner-validation.js +5 -28
- package/dist/cli/playbooks.d.ts +3 -4
- package/dist/cli/playbooks.js +131 -300
- package/dist/cli/predictions.d.ts +3 -0
- package/dist/cli/predictions.js +175 -0
- package/dist/cli/print.d.ts +2 -5
- package/dist/cli/print.js +3 -5
- package/dist/cli/projects.d.ts +2 -2
- package/dist/cli/projects.js +31 -25
- package/dist/cli/quality-repair-once.d.ts +1 -1
- package/dist/cli/quality-repair-once.js +7 -6
- package/dist/cli/recall.d.ts +2 -4
- package/dist/cli/recall.js +67 -137
- package/dist/cli/refine-llm.d.ts +5 -31
- package/dist/cli/refine-llm.js +23 -50
- package/dist/cli/remember.d.ts +3 -3
- package/dist/cli/remember.js +134 -192
- package/dist/cli/scheduler.d.ts +2 -17
- package/dist/cli/scheduler.js +14 -19
- package/dist/cli/serve.js +23 -14
- package/dist/cli/session-hooks.d.ts +11 -19
- package/dist/cli/session-hooks.js +143 -214
- package/dist/cli/setup.d.ts +4 -4
- package/dist/cli/setup.js +35 -30
- package/dist/cli/shared.d.ts +7 -25
- package/dist/cli/shared.js +17 -60
- package/dist/cli/slack.d.ts +2 -2
- package/dist/cli/slack.js +19 -23
- package/dist/cli/sleep-render.js +6 -3
- package/dist/cli/sleep.d.ts +3 -2
- package/dist/cli/sleep.js +17 -49
- package/dist/cli/status.d.ts +11 -14
- package/dist/cli/status.js +74 -120
- package/dist/cli/stdin.d.ts +4 -6
- package/dist/cli/stdin.js +2 -3
- package/dist/cli/transfer.d.ts +9 -9
- package/dist/cli/transfer.js +87 -108
- package/dist/cli/usage.d.ts +0 -79
- package/dist/cli/usage.js +1 -689
- package/dist/cli/verb-row.d.ts +32 -0
- package/dist/cli/verb-row.js +6 -0
- package/dist/cli/verbs/health.d.ts +27 -0
- package/dist/cli/verbs/health.js +232 -0
- package/dist/cli/verbs/memory.d.ts +16 -0
- package/dist/cli/verbs/memory.js +244 -0
- package/dist/cli/verbs/objects.d.ts +20 -0
- package/dist/cli/verbs/objects.js +254 -0
- package/dist/cli/verbs/sessions.d.ts +31 -0
- package/dist/cli/verbs/sessions.js +312 -0
- package/dist/cli/verbs.d.ts +81 -0
- package/dist/cli/verbs.js +7 -0
- package/dist/cli/versioned-verbs.d.ts +51 -0
- package/dist/cli/versioned-verbs.js +79 -0
- package/dist/cli.d.ts +1 -654
- package/dist/cli.js +44 -510
- package/dist/connectors/dlq.d.ts +39 -3
- package/dist/connectors/dlq.js +37 -3
- package/dist/connectors/github/backfill.d.ts +5 -25
- package/dist/connectors/github/backfill.js +26 -52
- package/dist/connectors/github/deletion.d.ts +4 -18
- package/dist/connectors/github/deletion.js +2 -15
- package/dist/connectors/github/dlq.d.ts +8 -33
- package/dist/connectors/github/dlq.js +34 -93
- package/dist/connectors/github/ingest.d.ts +4 -12
- package/dist/connectors/github/ingest.js +5 -36
- package/dist/connectors/github/octokit-client.d.ts +4 -16
- package/dist/connectors/github/octokit-client.js +27 -24
- package/dist/connectors/github/ratelimit.d.ts +3 -14
- package/dist/connectors/github/ratelimit.js +3 -14
- package/dist/connectors/github/scope.d.ts +3 -5
- package/dist/connectors/github/scope.js +3 -5
- package/dist/connectors/github/signature.d.ts +4 -26
- package/dist/connectors/github/signature.js +4 -26
- package/dist/connectors/github/tenant-routing.d.ts +2 -24
- package/dist/connectors/github/tenant-routing.js +4 -26
- package/dist/connectors/github/transform.js +2 -16
- package/dist/connectors/github/types.d.ts +3 -15
- package/dist/connectors/github/types.js +2 -9
- package/dist/connectors/github/webhook.d.ts +3 -16
- package/dist/connectors/github/webhook.js +38 -23
- package/dist/connectors/ingest.d.ts +10 -0
- package/dist/connectors/ingest.js +28 -0
- package/dist/connectors/slack/backfill.d.ts +4 -17
- package/dist/connectors/slack/backfill.js +4 -13
- package/dist/connectors/slack/dlq.d.ts +2 -19
- package/dist/connectors/slack/dlq.js +51 -90
- package/dist/connectors/slack/ingest.d.ts +4 -9
- package/dist/connectors/slack/ingest.js +4 -30
- package/dist/connectors/slack/scope.d.ts +2 -8
- package/dist/connectors/slack/scope.js +2 -8
- package/dist/connectors/slack/signature.d.ts +1 -6
- package/dist/connectors/slack/tenant-routing.d.ts +2 -19
- package/dist/connectors/slack/tenant-routing.js +2 -21
- package/dist/connectors/slack/transform.d.ts +2 -18
- package/dist/connectors/slack/transform.js +2 -18
- package/dist/connectors/slack/types.d.ts +3 -9
- package/dist/connectors/slack/types.js +2 -4
- package/dist/connectors/slack/web-client.js +33 -27
- package/dist/connectors/slack/webhook.d.ts +3 -19
- package/dist/connectors/slack/webhook.js +6 -26
- package/dist/connectors/slack/workspaces.d.ts +4 -24
- package/dist/connectors/slack/workspaces.js +4 -24
- package/dist/consolidate/conflicts.js +7 -15
- package/dist/consolidate/dag-summary.d.ts +8 -0
- package/dist/consolidate/dag-summary.js +41 -0
- package/dist/consolidate/dag.d.ts +5 -28
- package/dist/consolidate/dag.js +29 -84
- package/dist/consolidate/decay.js +7 -19
- package/dist/consolidate/dedupe.d.ts +13 -52
- package/dist/consolidate/dedupe.js +18 -74
- package/dist/consolidate/flush-units.d.ts +3 -4
- package/dist/consolidate/flush-units.js +3 -3
- package/dist/consolidate/half-life-migration.d.ts +3 -26
- package/dist/consolidate/half-life-migration.js +11 -28
- package/dist/consolidate/llm-passes.js +49 -40
- package/dist/consolidate/memory-value-weights.d.ts +2 -13
- package/dist/consolidate/memory-value-weights.js +2 -13
- package/dist/consolidate/memory-value.d.ts +11 -84
- package/dist/consolidate/memory-value.js +18 -105
- package/dist/consolidate/merge.js +12 -33
- package/dist/consolidate/physics-pass.d.ts +6 -1
- package/dist/consolidate/physics-pass.js +27 -9
- package/dist/consolidate/replay.d.ts +6 -38
- package/dist/consolidate/replay.js +25 -56
- package/dist/consolidate/run.js +1 -1
- package/dist/consolidate/sleep.d.ts +1 -8
- package/dist/consolidate/sleep.js +13 -22
- package/dist/consolidate/trace.d.ts +3 -18
- package/dist/consolidate/trace.js +3 -18
- package/dist/consolidate/traces.js +9 -25
- package/dist/core/ablation.d.ts +14 -91
- package/dist/core/ablation.js +16 -91
- package/dist/core/active-scope.d.ts +7 -0
- package/dist/{sharing/scope.js → core/active-scope.js} +5 -12
- package/dist/core/ambient.d.ts +5 -8
- package/dist/core/ambient.js +40 -26
- package/dist/core/api-errors.d.ts +16 -0
- package/dist/core/api-errors.js +20 -0
- package/dist/core/capture-contract.d.ts +4 -2
- package/dist/core/capture-contract.js +4 -2
- package/dist/core/card.d.ts +4 -1
- package/dist/core/card.js +11 -1
- package/dist/core/compaction-timing.d.ts +7 -0
- package/dist/core/compaction-timing.js +9 -0
- package/dist/core/compare.d.ts +11 -67
- package/dist/core/compare.js +9 -63
- package/dist/core/config.d.ts +10 -24
- package/dist/core/config.js +20 -16
- package/dist/core/cosine.d.ts +3 -0
- package/dist/core/cosine.js +19 -0
- package/dist/core/handoff.d.ts +1 -7
- package/dist/core/handoff.js +1 -7
- package/dist/core/markdown.d.ts +6 -0
- package/dist/{store → core}/markdown.js +23 -22
- package/dist/core/memory-audit.d.ts +17 -0
- package/dist/core/memory-audit.js +54 -0
- package/dist/core/memory-quality.js +1 -1
- package/dist/core/memory.d.ts +51 -168
- package/dist/core/memory.js +76 -239
- package/dist/{consolidate → core}/merged-row.d.ts +1 -1
- package/dist/{consolidate → core}/merged-row.js +3 -2
- package/dist/core/package-root.d.ts +3 -0
- package/dist/core/package-root.js +5 -0
- package/dist/core/physics-config.d.ts +1 -4
- package/dist/core/physics-config.js +3 -8
- package/dist/core/physics.d.ts +15 -61
- package/dist/core/physics.js +65 -138
- package/dist/core/prediction.d.ts +3 -0
- package/dist/core/prediction.js +6 -0
- package/dist/core/project-identity.d.ts +20 -58
- package/dist/core/project-identity.js +27 -39
- package/dist/core/project-remote.js +13 -2
- package/dist/core/raw-append-only.d.ts +5 -0
- package/dist/core/raw-append-only.js +7 -0
- package/dist/core/recall-scope.d.ts +69 -0
- package/dist/core/recall-scope.js +138 -0
- package/dist/core/salience.d.ts +1 -7
- package/dist/core/salience.js +1 -7
- package/dist/dashboard/dashboard-actions.js +2 -2
- package/dist/dashboard/dashboard-snapshot.d.ts +2 -1
- package/dist/dashboard/dashboard-snapshot.js +11 -2
- package/dist/dashboard/dashboard-types.d.ts +2 -1
- package/dist/dashboard/dashboard.d.ts +1 -0
- package/dist/dashboard/dashboard.js +50 -4
- package/dist/db/busy.d.ts +3 -8
- package/dist/db/busy.js +37 -33
- package/dist/db/connect.js +7 -8
- package/dist/db/index.d.ts +3 -3
- package/dist/db/index.js +3 -3
- package/dist/db/migrate.js +3 -3
- 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 -5
- package/dist/db/migrations/v14.js +2 -3
- package/dist/db/migrations/v15.js +2 -8
- package/dist/db/migrations/v16.js +2 -3
- package/dist/db/migrations/v17.js +2 -3
- package/dist/db/migrations/v19.js +2 -5
- package/dist/db/migrations/v20.js +2 -7
- package/dist/db/migrations/v22.js +4 -17
- package/dist/db/migrations/v23.js +3 -14
- package/dist/db/migrations/v24.js +2 -4
- package/dist/db/migrations/v25.js +3 -8
- package/dist/db/migrations/v26.js +2 -13
- package/dist/db/migrations/v27.js +3 -11
- package/dist/db/migrations/v28.js +2 -14
- package/dist/db/migrations/v29.js +4 -18
- package/dist/db/migrations/v30.js +4 -16
- package/dist/db/migrations/v31.js +2 -15
- package/dist/db/migrations/v32.js +4 -22
- package/dist/db/migrations/v33.js +2 -15
- package/dist/db/migrations/v34.js +2 -11
- package/dist/db/migrations/v35.js +2 -11
- package/dist/db/migrations/v36.js +2 -11
- package/dist/db/migrations/v37.js +8 -33
- package/dist/db/migrations/v38.js +5 -38
- package/dist/db/migrations/v39.js +9 -20
- package/dist/db/migrations/v40.js +2 -9
- package/dist/db/migrations/v41.js +2 -24
- package/dist/db/migrations/v43.js +1 -1
- package/dist/db/migrations/v44.js +2 -8
- package/dist/db/migrations/v45.js +2 -7
- package/dist/db/migrations/v47.js +2 -3
- package/dist/db/migrations/v51.js +1 -1
- package/dist/db/migrations/v55.d.ts +3 -0
- package/dist/db/migrations/v55.js +17 -0
- package/dist/db/open.d.ts +2 -2
- package/dist/db/open.js +21 -9
- package/dist/db/physics-state.d.ts +6 -22
- package/dist/db/physics-state.js +28 -39
- package/dist/db/raw-archive-mirror-cleanup.d.ts +2 -17
- package/dist/db/raw-archive-mirror-cleanup.js +2 -17
- package/dist/db/tables.d.ts +2 -0
- package/dist/db/tables.js +6 -2
- package/dist/db/vector-store.d.ts +2 -0
- package/dist/db/vector-store.js +25 -5
- package/dist/db/wal-checkpointer.js +2 -1
- package/dist/doctor.js +85 -27
- package/dist/embeddings/local.d.ts +62 -0
- package/dist/embeddings/local.js +146 -0
- package/dist/embeddings/provider.d.ts +43 -0
- package/dist/{store/embeddings → embeddings}/provider.js +58 -83
- package/dist/embeddings/transformers.d.ts +26 -0
- package/dist/embeddings/transformers.js +89 -0
- package/dist/entry/session-text.d.ts +1 -1
- package/dist/entry/session-text.js +3 -2
- package/dist/eval/eval-stats.d.ts +15 -53
- package/dist/eval/eval-stats.js +12 -42
- package/dist/eval/eval-suite.d.ts +2 -13
- package/dist/eval/eval-suite.js +91 -45
- package/dist/eval/eval.d.ts +6 -24
- package/dist/eval/eval.js +8 -35
- package/dist/eval/judgment.d.ts +0 -3
- package/dist/eval/judgment.js +30 -15
- package/dist/extensions/openclaw-plugin/index.js +1 -1
- package/dist/graph/extract.d.ts +5 -27
- package/dist/graph/extract.js +10 -36
- package/dist/graph/recall.d.ts +7 -20
- package/dist/graph/recall.js +15 -77
- package/dist/graph/stream.d.ts +7 -39
- package/dist/graph/stream.js +11 -34
- package/dist/graph/view.d.ts +9 -35
- package/dist/graph/view.js +24 -44
- package/dist/graph/write.d.ts +1 -1
- package/dist/graph/write.js +9 -9
- package/dist/hooks/codex-session.js +3 -2
- package/dist/hooks/codex-wrapper.js +4 -3
- package/dist/hooks/copilot.js +2 -1
- package/dist/hooks/hook-blocks.d.ts +6 -2
- package/dist/hooks/hook-blocks.js +37 -124
- package/dist/hooks/json-hooks.d.ts +4 -36
- package/dist/hooks/json-hooks.js +22 -59
- package/dist/hooks/opencode.d.ts +0 -38
- package/dist/hooks/opencode.js +17 -81
- package/dist/hooks/shared.d.ts +6 -21
- package/dist/hooks/shared.js +31 -33
- package/dist/importers/core.d.ts +12 -37
- package/dist/importers/core.js +10 -28
- package/dist/importers/markdown-parse.d.ts +8 -22
- package/dist/importers/markdown-parse.js +8 -25
- package/dist/importers/markdown.js +3 -12
- package/dist/importers/sources.js +12 -39
- package/dist/importers/vault.d.ts +2 -8
- package/dist/importers/vault.js +31 -85
- package/dist/index.d.ts +8 -3
- package/dist/index.js +8 -3
- package/dist/learn/autolearn.d.ts +23 -42
- package/dist/learn/autolearn.js +45 -52
- package/dist/learn/churn-git.js +13 -4
- package/dist/learn/extract.d.ts +3 -2
- package/dist/learn/extract.js +8 -8
- package/dist/learn/forward-claim-detector.d.ts +6 -30
- package/dist/learn/forward-claim-detector.js +18 -68
- package/dist/learn/invalidation.d.ts +6 -18
- package/dist/learn/invalidation.js +18 -31
- package/dist/mcp/admin-tools.d.ts +2 -2
- package/dist/mcp/admin-tools.js +30 -53
- package/dist/mcp/format.js +3 -2
- package/dist/mcp/framing.d.ts +1 -0
- package/dist/mcp/framing.js +1 -1
- package/dist/mcp/memory-tools.js +7 -10
- package/dist/mcp/protocol.d.ts +15 -29
- package/dist/mcp/protocol.js +26 -16
- package/dist/mcp/recall-tools.js +14 -11
- package/dist/mcp/request.d.ts +3 -11
- package/dist/mcp/request.js +12 -27
- package/dist/mcp/server.d.ts +3 -9
- package/dist/mcp/server.js +5 -16
- package/dist/mcp/session-state.d.ts +1 -1
- package/dist/mcp/session-state.js +5 -11
- package/dist/mcp/stdio.d.ts +2 -6
- package/dist/mcp/stdio.js +68 -16
- package/dist/mcp/tool-args.js +2 -1
- package/dist/mcp/tools.js +47 -22
- package/dist/objects/customer-notes.d.ts +9 -44
- package/dist/objects/customer-notes.js +7 -48
- package/dist/objects/decisions.d.ts +14 -52
- package/dist/objects/decisions.js +15 -53
- package/dist/objects/descriptor.d.ts +1 -1
- package/dist/objects/incidents.d.ts +9 -40
- package/dist/objects/incidents.js +7 -41
- package/dist/objects/lifecycle.d.ts +1 -1
- package/dist/objects/lifecycle.js +2 -1
- package/dist/objects/policies.d.ts +13 -91
- package/dist/objects/policies.js +13 -99
- package/dist/objects/processes.d.ts +9 -54
- package/dist/objects/processes.js +7 -61
- package/dist/objects/project-briefs.d.ts +13 -57
- package/dist/objects/project-briefs.js +16 -78
- package/dist/objects/skills.d.ts +9 -44
- package/dist/objects/skills.js +8 -54
- package/dist/postinstall.js +7 -20
- package/dist/predictions/planning-fallacy.d.ts +11 -34
- package/dist/rerankers/clef.js +6 -37
- package/dist/rerankers/cross-encoder.d.ts +31 -2
- package/dist/rerankers/cross-encoder.js +65 -101
- package/dist/rerankers/index.js +5 -4
- package/dist/rerankers/jev.js +11 -10
- package/dist/rerankers/llm.d.ts +2 -11
- package/dist/rerankers/llm.js +14 -14
- package/dist/rerankers/outage-warning.d.ts +5 -2
- package/dist/rerankers/outage-warning.js +7 -4
- package/dist/rerankers/remote.d.ts +1 -0
- package/dist/rerankers/remote.js +2 -0
- package/dist/rerankers/types.d.ts +2 -14
- package/dist/search/bm25-search.js +1 -1
- package/dist/search/boosts.d.ts +0 -2
- package/dist/search/boosts.js +3 -3
- package/dist/search/embed-memories.d.ts +9 -0
- package/dist/search/embed-memories.js +377 -0
- package/dist/search/goal-boost.d.ts +23 -0
- package/dist/search/goal-boost.js +93 -0
- package/dist/search/hybrid.d.ts +11 -2
- package/dist/search/hybrid.js +9 -4
- package/dist/search/multihop.js +2 -3
- package/dist/search/path-context.d.ts +5 -18
- package/dist/search/path-context.js +5 -18
- package/dist/search/physics-search.d.ts +6 -3
- package/dist/search/physics-search.js +29 -19
- package/dist/search/rerank.js +1 -1
- package/dist/search/rrf.d.ts +7 -35
- package/dist/search/rrf.js +5 -30
- package/dist/search/vector.d.ts +13 -4
- package/dist/search/vector.js +40 -13
- package/dist/server/auth.d.ts +11 -28
- package/dist/server/auth.js +49 -32
- package/dist/server/boot.d.ts +2 -21
- package/dist/server/boot.js +69 -161
- package/dist/server/client-ip.d.ts +3 -21
- package/dist/server/client-ip.js +8 -30
- package/dist/server/deadline.d.ts +0 -2
- package/dist/server/deadline.js +1 -7
- package/dist/server/defaults.d.ts +4 -0
- package/dist/server/defaults.js +5 -0
- package/dist/server/key-check-bounds.d.ts +2 -1
- package/dist/server/lifecycle.d.ts +5 -4
- package/dist/server/lifecycle.js +19 -4
- package/dist/server/mcp-http.js +24 -53
- package/dist/server/rate-limit.d.ts +5 -18
- package/dist/server/rate-limit.js +4 -13
- package/dist/server/request.d.ts +4 -8
- package/dist/server/request.js +16 -19
- package/dist/server/route-checks.d.ts +7 -0
- package/dist/server/route-checks.js +42 -0
- package/dist/server/route-table.d.ts +9 -8
- package/dist/server/route-table.js +127 -139
- package/dist/server/routes/admin.d.ts +8 -8
- package/dist/server/routes/admin.js +35 -49
- package/dist/server/routes/customer-notes.d.ts +6 -6
- package/dist/server/routes/customer-notes.js +8 -14
- package/dist/server/routes/decisions.d.ts +6 -6
- package/dist/server/routes/decisions.js +12 -21
- package/dist/server/routes/incidents.d.ts +6 -6
- package/dist/server/routes/incidents.js +14 -25
- package/dist/server/routes/memories.d.ts +9 -9
- package/dist/server/routes/memories.js +20 -63
- package/dist/server/routes/object-routes.d.ts +6 -11
- package/dist/server/routes/object-routes.js +11 -22
- package/dist/server/routes/policies.d.ts +7 -7
- package/dist/server/routes/policies.js +12 -22
- package/dist/server/routes/predictions.d.ts +6 -6
- package/dist/server/routes/predictions.js +22 -38
- package/dist/server/routes/processes.d.ts +6 -6
- package/dist/server/routes/processes.js +17 -28
- package/dist/server/routes/project-briefs.d.ts +7 -7
- package/dist/server/routes/project-briefs.js +11 -20
- package/dist/server/routes/recall.d.ts +5 -5
- package/dist/server/routes/recall.js +16 -45
- package/dist/server/routes/skills.d.ts +7 -7
- package/dist/server/routes/skills.js +10 -22
- package/dist/server/server-detect.d.ts +15 -53
- package/dist/server/server-detect.js +55 -96
- package/dist/server/sleep-child.js +26 -7
- package/dist/server/sleep-offload.d.ts +11 -5
- package/dist/server/sleep-offload.js +21 -12
- package/dist/server/types.d.ts +32 -18
- package/dist/server/validation.d.ts +3 -2
- package/dist/server/validation.js +15 -33
- package/dist/server.d.ts +7 -6
- package/dist/server.js +8 -6
- package/dist/sharing/global-store.d.ts +19 -0
- package/dist/sharing/global-store.js +75 -0
- package/dist/sharing/global-sync.d.ts +6 -0
- package/dist/sharing/global-sync.js +73 -0
- package/dist/sharing/project-merge.d.ts +11 -19
- package/dist/sharing/project-merge.js +63 -125
- package/dist/sharing/search-both.d.ts +60 -0
- package/dist/sharing/search-both.js +138 -0
- package/dist/sharing/share.d.ts +40 -0
- package/dist/sharing/share.js +229 -0
- package/dist/store/ambient.js +9 -15
- package/dist/store/audit-event.d.ts +5 -13
- package/dist/store/audit-event.js +4 -12
- package/dist/store/audit.d.ts +2 -21
- package/dist/store/audit.js +8 -67
- package/dist/store/auth.d.ts +10 -8
- package/dist/store/auth.js +17 -12
- package/dist/store/candidates.d.ts +23 -5
- package/dist/store/candidates.js +119 -71
- package/dist/store/capture-write.d.ts +17 -0
- package/dist/store/capture-write.js +35 -0
- package/dist/store/card-detail.d.ts +2 -1
- package/dist/store/card-detail.js +2 -1
- package/dist/store/cards.d.ts +14 -9
- package/dist/store/cards.js +72 -126
- package/dist/store/compaction-caller.d.ts +18 -0
- package/dist/store/compaction-caller.js +29 -0
- package/dist/store/compactions-record.d.ts +115 -0
- package/dist/store/compactions-record.js +417 -0
- package/dist/store/compactions.js +6 -4
- package/dist/store/conflicts.d.ts +4 -21
- package/dist/store/conflicts.js +76 -152
- package/dist/store/connectors/dlq.d.ts +10 -0
- package/dist/store/connectors/dlq.js +32 -0
- package/dist/store/connectors/github.d.ts +14 -16
- package/dist/store/connectors/github.js +34 -57
- package/dist/store/connectors/slack.d.ts +2 -11
- package/dist/store/connectors/slack.js +18 -47
- package/dist/store/dashboard-reads.js +11 -14
- package/dist/store/delete-and-batch.d.ts +17 -31
- package/dist/store/delete-and-batch.js +84 -67
- package/dist/store/delivery-recorder.d.ts +15 -4
- package/dist/store/delivery-recorder.js +34 -17
- package/dist/store/descendant-page.js +6 -3
- package/dist/store/diagnostics.js +6 -13
- package/dist/store/dormant.d.ts +8 -30
- package/dist/store/dormant.js +18 -57
- package/dist/store/embeddings/index.d.ts +11 -90
- package/dist/store/embeddings/index.js +18 -523
- package/dist/store/entry-reads.d.ts +34 -61
- package/dist/store/entry-reads.js +111 -136
- package/dist/store/entry-row.d.ts +6 -35
- package/dist/store/entry-row.js +9 -37
- package/dist/store/entry-writes.d.ts +12 -18
- package/dist/store/entry-writes.js +46 -44
- package/dist/store/failure-log-at.d.ts +8 -0
- package/dist/store/failure-log-at.js +16 -0
- package/dist/store/failure-log.d.ts +2 -2
- package/dist/store/failure-log.js +5 -3
- package/dist/{trust → store}/gated-write.d.ts +3 -1
- package/dist/{trust → store}/gated-write.js +7 -5
- package/dist/store/goals.d.ts +3 -40
- package/dist/store/goals.js +41 -178
- package/dist/store/graph-queue.d.ts +6 -22
- package/dist/store/graph-queue.js +14 -45
- package/dist/store/graph-reads.d.ts +11 -35
- package/dist/store/graph-reads.js +24 -60
- package/dist/store/graph-rows.d.ts +3 -6
- package/dist/store/graph-rows.js +6 -9
- package/dist/store/graph-view-rows.d.ts +2 -1
- package/dist/store/graph-view-rows.js +2 -1
- package/dist/store/graph-writes.d.ts +10 -35
- package/dist/store/graph-writes.js +59 -106
- package/dist/store/half-life.d.ts +2 -1
- package/dist/store/half-life.js +14 -16
- package/dist/store/handoffs.d.ts +6 -12
- package/dist/store/handoffs.js +22 -40
- package/dist/store/index-and-stats.d.ts +6 -19
- package/dist/store/index-and-stats.js +36 -84
- package/dist/store/key-writes.js +1 -1
- package/dist/store/ledger-turn.d.ts +9 -0
- package/dist/store/ledger-turn.js +38 -0
- package/dist/store/mirrors.d.ts +2 -6
- package/dist/store/mirrors.js +24 -29
- package/dist/store/open.d.ts +0 -4
- package/dist/store/open.js +42 -62
- package/dist/store/pilot-arm.d.ts +12 -0
- package/dist/store/pilot-arm.js +42 -0
- package/dist/store/planning-fallacy-evidence.d.ts +2 -30
- package/dist/store/planning-fallacy-evidence.js +8 -37
- package/dist/store/port.d.ts +91 -82
- package/dist/store/port.js +8 -0
- package/dist/store/predictions.d.ts +12 -53
- package/dist/store/predictions.js +41 -125
- package/dist/store/project-tags.d.ts +62 -0
- package/dist/store/project-tags.js +67 -0
- package/dist/{cli → store}/quality-repair.js +15 -31
- package/dist/store/quarantine.js +2 -1
- package/dist/store/raw-archive.d.ts +4 -16
- package/dist/store/raw-archive.js +14 -29
- package/dist/store/recall-trace.d.ts +12 -77
- package/dist/store/recall-trace.js +37 -97
- package/dist/store/rejected-values.js +9 -20
- package/dist/store/rejection-probe.d.ts +4 -0
- package/dist/store/rejection-probe.js +19 -0
- package/dist/store/rejection.d.ts +10 -73
- package/dist/store/rejection.js +12 -84
- package/dist/store/report-reads.d.ts +6 -0
- package/dist/store/report-reads.js +29 -0
- package/dist/store/rows.d.ts +9 -19
- package/dist/store/rows.js +36 -34
- package/dist/store/rule-sql.d.ts +14 -0
- package/dist/store/rule-sql.js +56 -0
- package/dist/store/search-rows.d.ts +7 -38
- package/dist/store/search-rows.js +23 -54
- package/dist/store/sessions.d.ts +10 -47
- package/dist/store/sessions.js +21 -75
- package/dist/store/set-aside.d.ts +14 -0
- package/dist/store/set-aside.js +23 -0
- package/dist/store/sqlite/busy.d.ts +3 -0
- package/dist/store/sqlite/busy.js +8 -0
- package/dist/store/sqlite/connector-events-group.js +5 -8
- package/dist/store/sqlite/connector-writes-group.js +3 -3
- package/dist/store/sqlite/entry-writes-group.js +4 -4
- package/dist/store/sqlite/error-codec.js +8 -5
- package/dist/store/sqlite/executor.d.ts +2 -1
- package/dist/store/sqlite/executor.js +12 -5
- package/dist/store/sqlite/graph-reads-group.js +1 -1
- package/dist/store/sqlite/held-connection.d.ts +9 -0
- package/dist/store/sqlite/held-connection.js +41 -0
- package/dist/store/sqlite/local.d.ts +3 -3
- package/dist/store/sqlite/local.js +1 -0
- package/dist/store/sqlite/object-rows.d.ts +1 -1
- package/dist/store/sqlite/object-rows.js +6 -3
- package/dist/store/sqlite/objects-group.d.ts +1 -1
- package/dist/store/sqlite/objects-group.js +5 -3
- package/dist/store/sqlite/quarantine-group.js +2 -2
- package/dist/store/sqlite/store.d.ts +1 -4
- package/dist/store/sqlite/store.js +16 -15
- package/dist/store/sqlite/vector-reads-group.js +2 -2
- package/dist/store/sqlite/worker-jobs.js +1 -1
- package/dist/store/sqlite/worker-ops.d.ts +13 -2
- package/dist/store/sqlite/worker-ops.js +13 -2
- package/dist/store/sqlite/worker-store.js +5 -2
- package/dist/store/summaries.d.ts +11 -63
- package/dist/store/summaries.js +37 -148
- package/dist/store/summary-dirty.js +1 -1
- package/dist/store/tenant-lookup.d.ts +6 -1
- package/dist/store/tenant-lookup.js +7 -0
- package/dist/store/tenant.d.ts +2 -16
- package/dist/store/tenant.js +4 -19
- package/dist/store/token-ledger.d.ts +13 -50
- package/dist/store/token-ledger.js +19 -85
- package/dist/store/usage-reports.js +5 -13
- package/dist/store/vector-index.d.ts +46 -0
- package/dist/store/vector-index.js +171 -0
- package/dist/store/working-memory.d.ts +6 -25
- package/dist/store/working-memory.js +18 -52
- package/dist/support-bundle.js +9 -8
- package/dist/trust/reject-flow.js +3 -5
- package/dist/util/agent-homes.d.ts +15 -0
- package/dist/util/agent-homes.js +34 -0
- package/dist/util/anthropic-messages.d.ts +3 -0
- package/dist/util/anthropic-messages.js +35 -6
- package/dist/util/atomic-write.d.ts +2 -1
- package/dist/util/atomic-write.js +35 -4
- package/dist/util/capped-json.d.ts +6 -0
- package/dist/util/capped-json.js +46 -0
- package/dist/util/chunked.d.ts +3 -0
- package/dist/util/chunked.js +10 -0
- package/dist/util/crash-handlers.d.ts +8 -1
- package/dist/util/crash-handlers.js +52 -10
- package/dist/util/ellipsize.d.ts +3 -0
- package/dist/util/ellipsize.js +5 -0
- package/dist/util/env.d.ts +14 -6
- package/dist/util/env.js +15 -7
- package/dist/util/format.d.ts +3 -0
- package/dist/util/format.js +6 -0
- package/dist/util/home-path.d.ts +2 -1
- package/dist/util/home-path.js +4 -2
- package/dist/util/hook-payload.d.ts +8 -0
- package/dist/util/hook-payload.js +37 -0
- package/dist/util/http-retry.d.ts +9 -1
- package/dist/util/http-retry.js +67 -8
- package/dist/util/http-util.d.ts +0 -8
- package/dist/util/http-util.js +10 -21
- package/dist/util/limits.d.ts +7 -0
- package/dist/util/limits.js +14 -0
- package/dist/util/log.d.ts +7 -2
- package/dist/util/log.js +34 -9
- package/dist/util/request-scope.d.ts +5 -2
- package/dist/util/request-scope.js +13 -7
- package/dist/util/secret-detect.d.ts +5 -30
- package/dist/util/secret-detect.js +19 -40
- package/dist/util/sqlite-blocked.d.ts +2 -0
- package/dist/util/sqlite-blocked.js +5 -0
- package/dist/util/stored-json.d.ts +1 -1
- package/dist/util/stored-json.js +1 -1
- package/dist/util/stream-tee.d.ts +3 -0
- package/dist/util/stream-tee.js +35 -0
- package/dist/util/time.d.ts +4 -0
- package/dist/util/time.js +4 -0
- package/dist/util/token-text.d.ts +1 -4
- package/dist/util/token-text.js +1 -4
- package/dist/util/transcript-tail.d.ts +2 -0
- package/dist/util/transcript-tail.js +24 -23
- package/dist/util/version.d.ts +5 -20
- package/dist/util/version.js +5 -20
- package/dist/{store → util}/yaml.d.ts +1 -5
- package/dist/{store → util}/yaml.js +2 -6
- package/extensions/openclaw-plugin/index.ts +1 -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 -2
- package/dist/cli/provenance-coverage.d.ts +0 -18
- package/dist/connectors/github/cli-impl.d.ts +0 -25
- package/dist/sharing/scope.d.ts +0 -14
- package/dist/sharing/shared.d.ts +0 -187
- package/dist/sharing/shared.js +0 -563
- package/dist/store/embeddings/local.d.ts +0 -15
- package/dist/store/embeddings/local.js +0 -192
- package/dist/store/embeddings/provider.d.ts +0 -77
- package/dist/store/markdown.d.ts +0 -10
- package/dist/store/recall-scope.d.ts +0 -138
- package/dist/store/recall-scope.js +0 -216
- package/dist/store/vector-writes.d.ts +0 -13
- package/dist/store/vector-writes.js +0 -89
- /package/dist/{store → core}/object-types.d.ts +0 -0
- /package/dist/{store → core}/object-types.js +0 -0
- /package/dist/{cli → store}/quality-repair.d.ts +0 -0
- /package/dist/{capture → util}/compaction-items.d.ts +0 -0
- /package/dist/{capture → util}/compaction-items.js +0 -0
package/dist/db/physics-state.js
CHANGED
|
@@ -1,16 +1,10 @@
|
|
|
1
|
-
/**
|
|
2
|
-
|
|
3
|
-
* Stores and loads particle state (position, velocity, mass, charge, temperature)
|
|
4
|
-
* in SQLite using BLOB columns for 384-dim vectors.
|
|
5
|
-
*/
|
|
6
|
-
import { evalNow } from '../core/ablation.js';
|
|
1
|
+
/** Physics state persistence: particle state (position, velocity, mass, charge, temperature) in SQLite, with BLOB columns for 384-dim vectors. */
|
|
2
|
+
import { evalNow, strengthAblation } from '../core/ablation.js';
|
|
7
3
|
import { withWriteScope } from './busy.js';
|
|
8
4
|
import { computeMass, computeCharge, computeTemperature, vecZero } from '../core/physics.js';
|
|
9
5
|
import { calculateStrength } from '../core/memory.js';
|
|
10
6
|
import { DAY_MS } from '../util/time.js';
|
|
11
|
-
// ---------------------------------------------------------------------------
|
|
12
7
|
// Float32Array <-> Buffer serialization
|
|
13
|
-
// ---------------------------------------------------------------------------
|
|
14
8
|
export function float32ToBuffer(arr) {
|
|
15
9
|
const f32 = new Float32Array(arr);
|
|
16
10
|
return Buffer.from(f32.buffer);
|
|
@@ -24,13 +18,8 @@ export function bufferToFloat32(buf) {
|
|
|
24
18
|
new Uint8Array(aligned).set(bytes);
|
|
25
19
|
return Array.from(new Float32Array(aligned));
|
|
26
20
|
}
|
|
27
|
-
// ---------------------------------------------------------------------------
|
|
28
21
|
// Schema migration
|
|
29
|
-
|
|
30
|
-
/**
|
|
31
|
-
* Create the memory_physics table (migration v8).
|
|
32
|
-
* Call this from db.ts MIGRATIONS array.
|
|
33
|
-
*/
|
|
22
|
+
/** Create the memory_physics table (migration v8). */
|
|
34
23
|
export function createPhysicsTable(db) {
|
|
35
24
|
db.exec(`
|
|
36
25
|
CREATE TABLE IF NOT EXISTS memory_physics (
|
|
@@ -108,12 +97,9 @@ export function savePhysicsState(db, particles) {
|
|
|
108
97
|
}
|
|
109
98
|
});
|
|
110
99
|
}
|
|
111
|
-
/**
|
|
112
|
-
* Initialize physics state for a memory from its embedding vector.
|
|
113
|
-
* Returns the new particle (does not persist — caller must save).
|
|
114
|
-
*/
|
|
100
|
+
/** Initialize physics state for a memory from its embedding vector; returns the new particle without persisting (the caller must save). */
|
|
115
101
|
export function initializeParticle(entry, embedding, now = evalNow()) {
|
|
116
|
-
const strength = calculateStrength(entry, now);
|
|
102
|
+
const strength = calculateStrength(entry, now, { ablation: strengthAblation() });
|
|
117
103
|
const ageDays = (now.getTime() - new Date(entry.created).getTime()) / DAY_MS;
|
|
118
104
|
return {
|
|
119
105
|
memoryId: entry.id,
|
|
@@ -125,34 +111,37 @@ export function initializeParticle(entry, embedding, now = evalNow()) {
|
|
|
125
111
|
lastSimulation: now.toISOString(),
|
|
126
112
|
};
|
|
127
113
|
}
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
* Drops existing physics data and re-initializes from the embedding index.
|
|
131
|
-
*/
|
|
114
|
+
const RESET_BATCH = 64;
|
|
115
|
+
/** Drops every particle, then seeds one per entry that has an embedding; `entries` may be read lazily, as each batch is written before the next is read. */
|
|
132
116
|
export function resetAllPhysicsState(db, entries, embeddingIndex, now = evalNow()) {
|
|
133
117
|
db.exec('DELETE FROM memory_physics');
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
118
|
+
// One transaction for every batch, so a failure part way leaves no particles rather than some.
|
|
119
|
+
return withWriteScope(db, 'reset_particles', () => {
|
|
120
|
+
let count = 0;
|
|
121
|
+
let batch = [];
|
|
122
|
+
const flush = () => {
|
|
123
|
+
savePhysicsState(db, batch);
|
|
124
|
+
count += batch.length;
|
|
125
|
+
batch = [];
|
|
126
|
+
};
|
|
127
|
+
for (const entry of entries) {
|
|
128
|
+
const embedding = embeddingIndex[entry.id];
|
|
129
|
+
if (!embedding || embedding.length === 0)
|
|
130
|
+
continue;
|
|
131
|
+
if (batch.push(initializeParticle(entry, embedding, now)) === RESET_BATCH)
|
|
132
|
+
flush();
|
|
133
|
+
}
|
|
134
|
+
flush();
|
|
135
|
+
return count;
|
|
136
|
+
});
|
|
145
137
|
}
|
|
146
|
-
/**
|
|
147
|
-
* Refresh mass, charge, and temperature for existing particles
|
|
148
|
-
* based on current memory attributes (called during consolidation).
|
|
149
|
-
*/
|
|
138
|
+
/** Refresh mass, charge and temperature for existing particles from current memory attributes (called during consolidation). */
|
|
150
139
|
export function refreshParticleProperties(particles, entries, now = evalNow()) {
|
|
151
140
|
for (const p of particles) {
|
|
152
141
|
const entry = entries.get(p.memoryId);
|
|
153
142
|
if (!entry)
|
|
154
143
|
continue;
|
|
155
|
-
const strength = calculateStrength(entry, now);
|
|
144
|
+
const strength = calculateStrength(entry, now, { ablation: strengthAblation() });
|
|
156
145
|
const ageDays = (now.getTime() - new Date(entry.created).getTime()) / DAY_MS;
|
|
157
146
|
p.mass = computeMass(strength, entry.retrieval_count);
|
|
158
147
|
p.charge = computeCharge(entry.emotional_valence);
|
|
@@ -1,20 +1,5 @@
|
|
|
1
1
|
import type { DatabaseSyncLike } from './index.js';
|
|
2
|
-
/**
|
|
3
|
-
*
|
|
4
|
-
* commit 70180b5 left their markdown mirrors at <hippoRoot>/<layer>/<id>.md
|
|
5
|
-
* with original content intact. The DB is already redacted via migration v20;
|
|
6
|
-
* this function deletes those filesystem mirrors so RTBF holds for historical
|
|
7
|
-
* archives too.
|
|
8
|
-
*
|
|
9
|
-
* Per-row tracking via raw_archive.mirror_cleaned_at (added in v21):
|
|
10
|
-
* - SELECT only rows WHERE mirror_cleaned_at IS NULL.
|
|
11
|
-
* - On success (every layer either deleted or didn't exist), UPDATE the row
|
|
12
|
-
* with the cleanup timestamp.
|
|
13
|
-
* - On any unlink failure, leave mirror_cleaned_at NULL so the next
|
|
14
|
-
* connection retries. Warn (capped at MAX_WARN_LOGS rows per call).
|
|
15
|
-
*
|
|
16
|
-
* Returns whether every pending row was cleaned; the SELECT has no index to
|
|
17
|
-
* use, so a connection runs it only when the archive has changed since.
|
|
18
|
-
*/
|
|
2
|
+
/** Path A backfill cleanup: delete markdown mirrors (<hippoRoot>/<layer>/<id>.md) of rows archived before redaction, so RTBF holds for historical archives.
|
|
3
|
+
* Tracked by raw_archive.mirror_cleaned_at: set only on success, so a failed unlink retries next connection. Returns whether all pending rows were cleaned. */
|
|
19
4
|
export declare function cleanupArchivedMirrors(hippoRoot: string, db: DatabaseSyncLike): boolean;
|
|
20
5
|
//# sourceMappingURL=raw-archive-mirror-cleanup.d.ts.map
|
|
@@ -3,23 +3,8 @@ import * as path from 'path';
|
|
|
3
3
|
import { errorMessage, log } from '../util/log.js';
|
|
4
4
|
const LAYERS = ['episodic', 'buffer', 'semantic'];
|
|
5
5
|
const MAX_WARN_LOGS = 5;
|
|
6
|
-
/**
|
|
7
|
-
*
|
|
8
|
-
* commit 70180b5 left their markdown mirrors at <hippoRoot>/<layer>/<id>.md
|
|
9
|
-
* with original content intact. The DB is already redacted via migration v20;
|
|
10
|
-
* this function deletes those filesystem mirrors so RTBF holds for historical
|
|
11
|
-
* archives too.
|
|
12
|
-
*
|
|
13
|
-
* Per-row tracking via raw_archive.mirror_cleaned_at (added in v21):
|
|
14
|
-
* - SELECT only rows WHERE mirror_cleaned_at IS NULL.
|
|
15
|
-
* - On success (every layer either deleted or didn't exist), UPDATE the row
|
|
16
|
-
* with the cleanup timestamp.
|
|
17
|
-
* - On any unlink failure, leave mirror_cleaned_at NULL so the next
|
|
18
|
-
* connection retries. Warn (capped at MAX_WARN_LOGS rows per call).
|
|
19
|
-
*
|
|
20
|
-
* Returns whether every pending row was cleaned; the SELECT has no index to
|
|
21
|
-
* use, so a connection runs it only when the archive has changed since.
|
|
22
|
-
*/
|
|
6
|
+
/** Path A backfill cleanup: delete markdown mirrors (<hippoRoot>/<layer>/<id>.md) of rows archived before redaction, so RTBF holds for historical archives.
|
|
7
|
+
* Tracked by raw_archive.mirror_cleaned_at: set only on success, so a failed unlink retries next connection. Returns whether all pending rows were cleaned. */
|
|
23
8
|
export function cleanupArchivedMirrors(hippoRoot, db) {
|
|
24
9
|
// SAFETY: the SELECT above names exactly one column, memory_id (raw_archive.memory_id
|
|
25
10
|
// is NOT NULL TEXT), so the row shape matches this assertion.
|
package/dist/db/tables.d.ts
CHANGED
|
@@ -7,5 +7,7 @@ export declare function tableExists(db: DatabaseSyncLike, tableName: string): bo
|
|
|
7
7
|
export declare function listTableNames(db: DatabaseSyncLike): string[];
|
|
8
8
|
/** Row count of one table; null when the table is missing or unreadable, which callers show as unknown. */
|
|
9
9
|
export declare function countTableRows(db: DatabaseSyncLike, table: string): number | null;
|
|
10
|
+
/** Sleep runs a store keeps; stats.json lists exactly these, so a recall's stats rewrite reads a fixed number of rows. */
|
|
11
|
+
export declare const CONSOLIDATION_RUNS_KEPT = 50;
|
|
10
12
|
export declare function pruneConsolidationRuns(db: DatabaseSyncLike, keep?: number): void;
|
|
11
13
|
//# sourceMappingURL=tables.d.ts.map
|
package/dist/db/tables.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { errorCode, log } from '../util/log.js';
|
|
1
2
|
/** Column names of one table; empty when the table is missing. */
|
|
2
3
|
export function tableColumns(db, tableName) {
|
|
3
4
|
if (!/^[a-z_]+$/i.test(tableName))
|
|
@@ -30,12 +31,15 @@ export function countTableRows(db, table) {
|
|
|
30
31
|
const row = db.prepare(`SELECT COUNT(*) AS n FROM "${table.replace(/"/g, '""')}"`).get();
|
|
31
32
|
return Number(row?.n ?? 0);
|
|
32
33
|
}
|
|
33
|
-
catch {
|
|
34
|
+
catch (err) {
|
|
34
35
|
// Callers treat an uncountable table as unknown; the bundle and doctor still finish.
|
|
36
|
+
log.warn(`could not count rows in table ${table}`, { table, code: errorCode(err) || 'unknown' });
|
|
35
37
|
return null;
|
|
36
38
|
}
|
|
37
39
|
}
|
|
38
|
-
|
|
40
|
+
/** Sleep runs a store keeps; stats.json lists exactly these, so a recall's stats rewrite reads a fixed number of rows. */
|
|
41
|
+
export const CONSOLIDATION_RUNS_KEPT = 50;
|
|
42
|
+
export function pruneConsolidationRuns(db, keep = CONSOLIDATION_RUNS_KEPT) {
|
|
39
43
|
db.prepare(`
|
|
40
44
|
DELETE FROM consolidation_runs
|
|
41
45
|
WHERE id NOT IN (
|
|
@@ -15,6 +15,8 @@ export declare function loadVectors(db: DatabaseSyncLike, ids?: readonly string[
|
|
|
15
15
|
/** `loadVectors` for `ids` with no copy: each value views the bytes the store returned for that row. */
|
|
16
16
|
export declare function loadVectorViews(db: DatabaseSyncLike, ids: readonly string[]): Map<string, Float32Array>;
|
|
17
17
|
export declare function storedVectorIds(db: DatabaseSyncLike): Set<string>;
|
|
18
|
+
/** Float count of the first stored row, from its blob length; the vector is never read. */
|
|
19
|
+
export declare function storedVectorDims(db: DatabaseSyncLike): number | undefined;
|
|
18
20
|
export declare function hasStoredVectors(db: DatabaseSyncLike): boolean;
|
|
19
21
|
export interface VectorMatch {
|
|
20
22
|
id: string;
|
package/dist/db/vector-store.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
import * as fs from 'fs';
|
|
3
3
|
import * as path from 'path';
|
|
4
4
|
import { withWriteScope } from './busy.js';
|
|
5
|
-
import { log } from '../util/log.js';
|
|
5
|
+
import { errorCode, errorFields, log } from '../util/log.js';
|
|
6
6
|
/** Legacy whole-file index; imported once into `memory_vectors`, then kept beside the store as a renamed backup. */
|
|
7
7
|
const LEGACY_EMBEDDINGS_FILE = 'embeddings.json';
|
|
8
8
|
export const EMBEDDING_MODEL_META_KEY = 'embedding_model';
|
|
@@ -85,6 +85,12 @@ export function storedVectorIds(db) {
|
|
|
85
85
|
// SAFETY: the SELECT names exactly the one column read.
|
|
86
86
|
return new Set(db.prepare('SELECT memory_id FROM memory_vectors').all().map((r) => r.memory_id));
|
|
87
87
|
}
|
|
88
|
+
/** Float count of the first stored row, from its blob length; the vector is never read. */
|
|
89
|
+
export function storedVectorDims(db) {
|
|
90
|
+
// SAFETY: the SELECT names exactly the one column read.
|
|
91
|
+
const row = db.prepare('SELECT length(vector) AS bytes FROM memory_vectors LIMIT 1').get();
|
|
92
|
+
return row === undefined ? undefined : Math.floor(row.bytes / 4);
|
|
93
|
+
}
|
|
88
94
|
export function hasStoredVectors(db) {
|
|
89
95
|
return db.prepare('SELECT 1 FROM memory_vectors LIMIT 1').get() !== undefined;
|
|
90
96
|
}
|
|
@@ -141,7 +147,8 @@ export async function topVectorMatches(db, query, k, where, params) {
|
|
|
141
147
|
const best = bestMatches(query, k);
|
|
142
148
|
if (!best)
|
|
143
149
|
return [];
|
|
144
|
-
// SHORTCUT: brute-force cosine over every admitted vector, a chunk per event-loop turn; latency
|
|
150
|
+
// SHORTCUT: brute-force cosine over every admitted vector, a chunk per event-loop turn; latency
|
|
151
|
+
// still grows with rows, fine to ~100k, and an ANN index (sqlite-vec, HNSW) is the upgrade.
|
|
145
152
|
// SAFETY: the SELECT names exactly these two columns; node:sqlite returns BLOBs as Uint8Array.
|
|
146
153
|
const rows = db.prepare(`
|
|
147
154
|
SELECT v.memory_id AS id, v.vector AS vector
|
|
@@ -181,17 +188,30 @@ function insertSorted(top, m, k) {
|
|
|
181
188
|
function stamp() {
|
|
182
189
|
return `${new Date().toISOString().replace(/[:.]/g, '-')}-${process.pid}`;
|
|
183
190
|
}
|
|
184
|
-
|
|
191
|
+
// The codes a rename gets when another process holds the file open (Windows); any other failure would fail a copy too.
|
|
192
|
+
const RENAME_BLOCKED_CODES = new Set(['EPERM', 'EBUSY', 'EACCES']);
|
|
193
|
+
/** Rename `fp` to `aside`; a rename blocked by an open handle falls back to a copy, so the bytes are kept either way. */
|
|
185
194
|
function moveAside(fp, aside) {
|
|
186
195
|
try {
|
|
187
196
|
fs.renameSync(fp, aside);
|
|
188
197
|
return true;
|
|
189
198
|
}
|
|
190
199
|
catch (err) {
|
|
191
|
-
|
|
200
|
+
const code = errorCode(err);
|
|
201
|
+
if (code === 'ENOENT')
|
|
192
202
|
return false;
|
|
203
|
+
if (!RENAME_BLOCKED_CODES.has(code))
|
|
204
|
+
throw err;
|
|
205
|
+
log.warn(`could not rename ${path.basename(fp)} aside (${code}); copying it instead`, { path: fp, ...errorFields(err) });
|
|
193
206
|
fs.copyFileSync(fp, aside, fs.constants.COPYFILE_EXCL);
|
|
194
|
-
|
|
207
|
+
try {
|
|
208
|
+
fs.rmSync(fp, { force: true });
|
|
209
|
+
}
|
|
210
|
+
catch (rmErr) {
|
|
211
|
+
// The original stays for the next open to retry, so a copy left beside it would pile up one per open.
|
|
212
|
+
fs.rmSync(aside, { force: true });
|
|
213
|
+
throw rmErr;
|
|
214
|
+
}
|
|
195
215
|
return true;
|
|
196
216
|
}
|
|
197
217
|
}
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
import * as path from 'node:path';
|
|
3
3
|
import { Worker } from 'node:worker_threads';
|
|
4
4
|
import { errorMessage, log } from '../util/log.js';
|
|
5
|
+
import { DEFAULT_BUSY_WAIT_MS } from './busy.js';
|
|
5
6
|
// WAL pages at which a connection checkpoints inside its own commit.
|
|
6
7
|
const INLINE_CHECKPOINT_PAGES = 100;
|
|
7
8
|
// The same limit while a worker checkpoints the store: SQLite still bounds the WAL when the worker falls behind.
|
|
@@ -17,7 +18,7 @@ const WORKER_SOURCE = `
|
|
|
17
18
|
const { parentPort, workerData } = require('node:worker_threads');
|
|
18
19
|
const { DatabaseSync } = require('node:sqlite');
|
|
19
20
|
const db = new DatabaseSync(workerData.dbPath);
|
|
20
|
-
db.exec('PRAGMA busy_timeout =
|
|
21
|
+
db.exec('PRAGMA busy_timeout = ${DEFAULT_BUSY_WAIT_MS}');
|
|
21
22
|
db.exec('PRAGMA synchronous = NORMAL');
|
|
22
23
|
const pass = db.prepare('PRAGMA wal_checkpoint(PASSIVE)');
|
|
23
24
|
parentPort.on('message', (message) => {
|
package/dist/doctor.js
CHANGED
|
@@ -1,23 +1,20 @@
|
|
|
1
|
-
/**
|
|
2
|
-
*
|
|
3
|
-
* hippo, or when something seems off. Read-only: it never creates a store,
|
|
4
|
-
* installs a hook or migrates a database. Every non-passing check names the
|
|
5
|
-
* command that fixes it, so an agent can act on the `--json` output.
|
|
6
|
-
*/
|
|
1
|
+
/** `hippo doctor`: a read-only health check (never creates a store, installs a hook or migrates a database).
|
|
2
|
+
* Every non-passing check names the command that fixes it, so an agent can act on the `--json` output. */
|
|
7
3
|
import * as fs from 'node:fs';
|
|
8
4
|
import * as os from 'node:os';
|
|
9
5
|
import * as path from 'node:path';
|
|
10
|
-
import { findHippoStoreDir } from './core/project-identity.js';
|
|
11
|
-
import { getGlobalRoot } from './sharing/
|
|
12
|
-
import { isInitialized } from './store/open.js';
|
|
6
|
+
import { findHippoStoreDir, isInitialized } from './core/project-identity.js';
|
|
7
|
+
import { getGlobalRoot } from './sharing/global-store.js';
|
|
13
8
|
import { readStoreHealth } from './store/diagnostics.js';
|
|
14
9
|
import { loadConfig } from './core/config.js';
|
|
15
10
|
import { openHippoDbReadOnly, closeHippoDb, getCurrentSchemaVersion, IncompatibleBinaryError } from './db/index.js';
|
|
16
|
-
import { REPLAY_AFTER_MS, TRANSCRIPT_FILL_WINDOW_MS } from './
|
|
11
|
+
import { REPLAY_AFTER_MS, TRANSCRIPT_FILL_WINDOW_MS } from './core/compaction-timing.js';
|
|
17
12
|
import { SPOOL_DIR, spoolCounts } from './capture/compaction-spool.js';
|
|
18
|
-
import { isEmbeddingAvailable } from './
|
|
19
|
-
import { CODEX_TRUST_LINE,
|
|
13
|
+
import { isEmbeddingAvailable } from './embeddings/local.js';
|
|
14
|
+
import { CODEX_TRUST_LINE, isCodexPresent } from './hooks/shared.js';
|
|
15
|
+
import { claudeConfigDir, codexHomeDir } from './util/agent-homes.js';
|
|
20
16
|
import { planProjectRepair } from './sharing/project-merge.js';
|
|
17
|
+
import { projectTagReads } from './store/project-tags.js';
|
|
21
18
|
import { resolveTenantId } from './store/tenant.js';
|
|
22
19
|
import { errorMessage, log } from './util/log.js';
|
|
23
20
|
import { readJsonFile, isJsonObjectLiteral } from './util/json.js';
|
|
@@ -50,7 +47,12 @@ function codexCheck(home) {
|
|
|
50
47
|
const parsed = readJson(file);
|
|
51
48
|
// Codex drops every hook in a hooks.json it cannot parse, hippo's included.
|
|
52
49
|
if (fs.existsSync(file) && !isJsonObjectLiteral(parsed)) {
|
|
53
|
-
return {
|
|
50
|
+
return {
|
|
51
|
+
id: 'codex',
|
|
52
|
+
status: 'warn',
|
|
53
|
+
detail: "Codex's hooks.json is not a JSON object, so Codex runs no hook from it",
|
|
54
|
+
fix: 'repair hooks.json, then run: hippo hook install codex'
|
|
55
|
+
};
|
|
54
56
|
}
|
|
55
57
|
const text = JSON.stringify(parsed ?? '');
|
|
56
58
|
const codexHooks = [
|
|
@@ -63,7 +65,9 @@ function codexCheck(home) {
|
|
|
63
65
|
return {
|
|
64
66
|
id: 'codex',
|
|
65
67
|
status: 'warn',
|
|
66
|
-
detail: missing.length === codexHooks.length
|
|
68
|
+
detail: missing.length === codexHooks.length
|
|
69
|
+
? "Codex found, but hippo's memory hooks are not installed"
|
|
70
|
+
: `Codex: hippo hooks missing for ${missing.join(', ')}`,
|
|
67
71
|
fix: 'hippo hook install codex (then trust the hooks once in /hooks)',
|
|
68
72
|
};
|
|
69
73
|
}
|
|
@@ -88,7 +92,12 @@ function sleepCheck(lastSleep, now) {
|
|
|
88
92
|
const last = lastSleep.value;
|
|
89
93
|
const when = last !== undefined ? Date.parse(last) : Number.NaN;
|
|
90
94
|
if (Number.isNaN(when)) {
|
|
91
|
-
return {
|
|
95
|
+
return {
|
|
96
|
+
id: 'sleep',
|
|
97
|
+
status: 'warn',
|
|
98
|
+
detail: 'hippo has never slept (consolidated) in this store',
|
|
99
|
+
fix: 'hippo sleep (the session-end hook runs it automatically)'
|
|
100
|
+
};
|
|
92
101
|
}
|
|
93
102
|
const days = Math.floor((now.getTime() - when) / DAY_MS);
|
|
94
103
|
return days > 7
|
|
@@ -124,7 +133,8 @@ function compactionsCheck(compactions, store, now) {
|
|
|
124
133
|
].filter((s) => s !== '');
|
|
125
134
|
const unfinished = stuck === 0
|
|
126
135
|
? `${recorded} in the store`
|
|
127
|
-
: `${stuck} compaction${stuck === 1 ? '' : 's'} unfinished after 10 minutes
|
|
136
|
+
: `${stuck} compaction${stuck === 1 ? '' : 's'} unfinished after 10 minutes ` +
|
|
137
|
+
`(${summarised} with a summary whose memories are not saved yet, ${started} with no summary yet)`;
|
|
128
138
|
const note = spooled ? `; spool: ${spool.waiting} waiting, ${spool.stale} left by a replay that stopped, ${spool.bad} .bad` : '';
|
|
129
139
|
return { id: 'compactions', status: 'warn', detail: `${unfinished}${note}${unread}`, fix: fix.join('; ') };
|
|
130
140
|
}
|
|
@@ -133,16 +143,23 @@ function projectsCheck(globalRoot) {
|
|
|
133
143
|
let db = null;
|
|
134
144
|
try {
|
|
135
145
|
db = openHippoDbReadOnly(globalRoot);
|
|
136
|
-
const r = planProjectRepair(db,
|
|
146
|
+
const r = planProjectRepair(projectTagReads(db, resolveTenantId({})), globalRoot);
|
|
137
147
|
const found = [
|
|
138
148
|
r.copies.length > 0 ? `${r.copies.length} imported notes copied under the wrong project` : '',
|
|
139
149
|
r.folds.length > 0 ? `old project names that now resolve to another project: ${r.folds.map((f) => `${f.from} -> ${f.into}`).join(', ')}` : '',
|
|
140
|
-
r.collisions.length > 0
|
|
150
|
+
r.collisions.length > 0
|
|
151
|
+
? `old project names shared by several projects, folded by hand only: ${r.collisions.map((c) => `${c.name} (${c.ids.join(', ')})`).join('; ')}`
|
|
152
|
+
: '',
|
|
141
153
|
r.toProject.length + r.setAside.length > 0 ? `${r.toProject.length + r.setAside.length} merged memories tagged user-global` : '',
|
|
142
154
|
].filter((s) => s !== '');
|
|
143
155
|
return found.length === 0
|
|
144
156
|
? { id: 'projects', status: 'pass', detail: 'no duplicate or out-of-date project tags in the global store' }
|
|
145
|
-
: {
|
|
157
|
+
: {
|
|
158
|
+
id: 'projects',
|
|
159
|
+
status: 'warn',
|
|
160
|
+
detail: `global store: ${found.join('; ')}`,
|
|
161
|
+
fix: 'hippo projects repair --global (dry run; add --apply to write)'
|
|
162
|
+
};
|
|
146
163
|
}
|
|
147
164
|
catch (err) {
|
|
148
165
|
return { id: 'projects', status: 'info', detail: `project tags not checked (${errorMessage(err)})` };
|
|
@@ -160,16 +177,43 @@ function nodeCheck(node) {
|
|
|
160
177
|
/** The store the checks run against (project first, then global), and the check that says which. */
|
|
161
178
|
function storeCheck(local, globalRoot, hasGlobal) {
|
|
162
179
|
if (local !== null && isInitialized(local)) {
|
|
163
|
-
return {
|
|
180
|
+
return {
|
|
181
|
+
store: local,
|
|
182
|
+
check: { id: 'store', status: 'pass', detail: `project store at ${local}${hasGlobal ? ` (global store at ${globalRoot} too)` : ''}` }
|
|
183
|
+
};
|
|
164
184
|
}
|
|
165
185
|
if (local !== null) {
|
|
166
186
|
// The walk stops at the first .hippo it finds, so a bare one (no hippo.db) blocks a parent or global store too.
|
|
167
|
-
return {
|
|
187
|
+
return {
|
|
188
|
+
store: null,
|
|
189
|
+
check: {
|
|
190
|
+
id: 'store',
|
|
191
|
+
status: 'fail',
|
|
192
|
+
detail: `${local} has no hippo.db, so hippo commands run here stop at it`,
|
|
193
|
+
fix: `run hippo init in ${path.dirname(local)}, or remove that .hippo folder`
|
|
194
|
+
}
|
|
195
|
+
};
|
|
168
196
|
}
|
|
169
197
|
if (hasGlobal) {
|
|
170
|
-
return {
|
|
198
|
+
return {
|
|
199
|
+
store: globalRoot,
|
|
200
|
+
check: {
|
|
201
|
+
id: 'store',
|
|
202
|
+
status: 'warn',
|
|
203
|
+
detail: `no project store here; using the global store at ${globalRoot}`,
|
|
204
|
+
fix: 'hippo init (in the project root)'
|
|
205
|
+
}
|
|
206
|
+
};
|
|
171
207
|
}
|
|
172
|
-
return {
|
|
208
|
+
return {
|
|
209
|
+
store: null,
|
|
210
|
+
check: {
|
|
211
|
+
id: 'store',
|
|
212
|
+
status: 'fail',
|
|
213
|
+
detail: 'no hippo store found (project or global)',
|
|
214
|
+
fix: 'hippo init (in the project root), or hippo init --global'
|
|
215
|
+
}
|
|
216
|
+
};
|
|
173
217
|
}
|
|
174
218
|
function schemaCheck(have, want) {
|
|
175
219
|
return have === want
|
|
@@ -211,7 +255,8 @@ function tokensCheck(tokens) {
|
|
|
211
255
|
return {
|
|
212
256
|
id: 'tokens',
|
|
213
257
|
status: 'info',
|
|
214
|
-
detail: `${tally.injected} memory blocks sent to agents in 7 days, about ${tally.tokensSent} tokens sent
|
|
258
|
+
detail: `${tally.injected} memory blocks sent to agents in 7 days, about ${tally.tokensSent} tokens sent ` +
|
|
259
|
+
`and ${tally.tokensReread} re-read by later model calls (hippo tokens for detail)`,
|
|
215
260
|
};
|
|
216
261
|
}
|
|
217
262
|
/** Checks that read the store's database; a store that cannot be opened becomes one failed schema check. */
|
|
@@ -269,7 +314,12 @@ function claudeCodeCheck(home) {
|
|
|
269
314
|
if (missing.length === CLAUDE_CODE_HOOKS.length) {
|
|
270
315
|
return { id: 'claude-code', status: 'warn', detail: 'Claude Code found, but no hippo hooks are installed', fix: 'hippo hook install claude-code' };
|
|
271
316
|
}
|
|
272
|
-
return {
|
|
317
|
+
return {
|
|
318
|
+
id: 'claude-code',
|
|
319
|
+
status: 'warn',
|
|
320
|
+
detail: `Claude Code: hippo hooks missing for ${missing.join(', ')}`,
|
|
321
|
+
fix: 'hippo hook install claude-code (adds only what is missing)'
|
|
322
|
+
};
|
|
273
323
|
}
|
|
274
324
|
/** Run every check. Never throws for a broken install; broken parts become failed checks. */
|
|
275
325
|
export function runDoctor(opts) {
|
|
@@ -287,14 +337,22 @@ export function runDoctor(opts) {
|
|
|
287
337
|
checks.push(...databaseChecks(store, now));
|
|
288
338
|
const holdoutRateBp = store === null ? 0 : loadConfig(store).pilot.holdoutRateBp;
|
|
289
339
|
if (holdoutRateBp > 0) {
|
|
290
|
-
checks.push({
|
|
340
|
+
checks.push({
|
|
341
|
+
id: 'pilot',
|
|
342
|
+
status: 'info',
|
|
343
|
+
detail: `pilot holdout on: about ${holdoutRateBp / 100}% of sessions get no memories pushed by hippo (pilot.holdoutRateBp=${holdoutRateBp})`
|
|
344
|
+
});
|
|
291
345
|
}
|
|
292
346
|
if (hasGlobal)
|
|
293
347
|
checks.push(projectsCheck(globalRoot));
|
|
294
348
|
checks.push(claudeCodeCheck(home));
|
|
295
349
|
if (isCodexPresent(home))
|
|
296
350
|
checks.push(codexCheck(home));
|
|
297
|
-
checks.push({
|
|
351
|
+
checks.push({
|
|
352
|
+
id: 'embeddings',
|
|
353
|
+
status: 'info',
|
|
354
|
+
detail: isEmbeddingAvailable() ? 'local embeddings available (hybrid search)' : 'embeddings not installed; recall uses BM25 (optional: hippo embed --help)'
|
|
355
|
+
});
|
|
298
356
|
return { ok: !checks.some((c) => c.status === 'fail'), version: opts.version, store, checks };
|
|
299
357
|
}
|
|
300
358
|
/** Human-readable rendering of a {@link DoctorReport}. */
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/** The one call this file makes on a Transformers.js feature-extraction pipeline, and the part of its tensor it reads. */
|
|
2
|
+
interface EmbeddingPipeline {
|
|
3
|
+
(input: string, options: {
|
|
4
|
+
pooling: 'cls' | 'mean';
|
|
5
|
+
normalize: boolean;
|
|
6
|
+
}): Promise<{
|
|
7
|
+
data: ArrayLike<number>;
|
|
8
|
+
}>;
|
|
9
|
+
}
|
|
10
|
+
type PipelineFactory = (task: 'feature-extraction', model: string, options: {
|
|
11
|
+
quantized: boolean;
|
|
12
|
+
}) => Promise<EmbeddingPipeline>;
|
|
13
|
+
/** The settings written on the package's `env` object. */
|
|
14
|
+
interface TransformersEnv {
|
|
15
|
+
cacheDir?: string;
|
|
16
|
+
localModelPath?: string;
|
|
17
|
+
allowRemoteModels?: boolean;
|
|
18
|
+
}
|
|
19
|
+
/** The parts of the optional package's module this file reads; either export spelling may carry `pipeline`. */
|
|
20
|
+
interface TransformersModule {
|
|
21
|
+
env?: TransformersEnv;
|
|
22
|
+
pipeline?: PipelineFactory;
|
|
23
|
+
default?: {
|
|
24
|
+
pipeline?: PipelineFactory;
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
export declare const DEFAULT_EMBEDDING_MODEL = "Xenova/all-MiniLM-L6-v2";
|
|
28
|
+
/** BGE was trained with CLS pooling; everything else gets mean, the sentence-transformers default, since CLS degrades mean-trained models. */
|
|
29
|
+
export declare function poolingFor(model: string): 'cls' | 'mean';
|
|
30
|
+
/** `query` is search input, `passage` is a document being indexed; no role means no prefix on any model. */
|
|
31
|
+
export type EmbeddingRole = 'query' | 'passage';
|
|
32
|
+
/** e5 models only match a query to a passage when each side carries its trained prefix. */
|
|
33
|
+
export declare function prefixFor(model: string, role?: EmbeddingRole): string;
|
|
34
|
+
/** The optional package as the local embedder reaches it; tests hand in a stand-in. */
|
|
35
|
+
export interface LocalTransformers {
|
|
36
|
+
/** Whether a package is installed, answered without importing it. */
|
|
37
|
+
installed(): boolean;
|
|
38
|
+
/** The package's module, or null when neither package is installed. */
|
|
39
|
+
load(): Promise<{
|
|
40
|
+
readonly name: string;
|
|
41
|
+
readonly mod: TransformersModule;
|
|
42
|
+
} | null>;
|
|
43
|
+
}
|
|
44
|
+
export interface LocalEmbedder {
|
|
45
|
+
isAvailable(): boolean;
|
|
46
|
+
/** Throws, with the reason, when the model's pipeline cannot load: a provider-level failure, not a per-item skip.
|
|
47
|
+
* `signal` ends the wait, never the load, and only once the load is downloading: a load from disk ends soon on its own, a download may not. */
|
|
48
|
+
requirePipeline(model: string, signal?: AbortSignal): Promise<void>;
|
|
49
|
+
/** `text`'s vector, or `[]` when the model is missing or fails; `role` adds e5-style prefixes. */
|
|
50
|
+
embed(text: string, model: string, role?: EmbeddingRole): Promise<number[]>;
|
|
51
|
+
}
|
|
52
|
+
/** One pipeline per model for the embedder's life, since a pipeline is expensive to load. */
|
|
53
|
+
export declare function createLocalEmbedder(transformers?: LocalTransformers): LocalEmbedder;
|
|
54
|
+
/** The process's embedder, shared by every provider and caller so each model loads once. */
|
|
55
|
+
export declare const sharedLocalEmbedder: LocalEmbedder;
|
|
56
|
+
/** Check (synchronously) if @xenova/transformers or @huggingface/transformers is installed. */
|
|
57
|
+
export declare function isEmbeddingAvailable(): boolean;
|
|
58
|
+
export declare function resolveEmbeddingModel(hippoRoot: string, explicitModel?: string): string;
|
|
59
|
+
/** Embeds `text` with the local model, or returns `[]` when Transformers.js is missing or fails; `role` adds e5-style prefixes. */
|
|
60
|
+
export declare function getEmbedding(text: string, model?: string, role?: EmbeddingRole): Promise<number[]>;
|
|
61
|
+
export {};
|
|
62
|
+
//# sourceMappingURL=local.d.ts.map
|