hippo-memory 1.71.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 +1 -1
- package/dist/agent-memories/apply.d.ts +0 -11
- package/dist/agent-memories/apply.js +6 -21
- package/dist/agent-memories/claude-code.js +1 -1
- 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/project-folds.d.ts +10 -0
- package/dist/agent-memories/project-folds.js +34 -0
- package/dist/agent-memories/sync.js +8 -6
- package/dist/api/assemble.js +1 -1
- package/dist/api/audit.d.ts +29 -1
- package/dist/api/audit.js +44 -5
- package/dist/api/auth.d.ts +7 -4
- package/dist/api/auth.js +12 -8
- package/dist/api/auto-sleep.d.ts +5 -2
- package/dist/api/auto-sleep.js +7 -3
- package/dist/api/availability.js +2 -3
- 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 +9 -11
- package/dist/api/context.js +17 -8
- package/dist/api/continuity.d.ts +47 -0
- package/dist/api/continuity.js +66 -0
- package/dist/api/dormant.js +4 -2
- package/dist/api/drill-down.js +1 -1
- 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 +6 -2
- package/dist/api/forget.js +18 -7
- package/dist/api/goals.d.ts +1 -1
- package/dist/api/goals.js +5 -9
- package/dist/api/index.d.ts +4 -2
- package/dist/api/index.js +4 -2
- package/dist/api/instruction-detect.js +5 -1
- package/dist/api/learn.d.ts +4 -0
- package/dist/api/learn.js +53 -27
- package/dist/api/ledger-db.d.ts +2 -6
- package/dist/api/ledger-db.js +4 -36
- package/dist/api/memories.d.ts +19 -1
- package/dist/api/memories.js +39 -0
- package/dist/api/objects.d.ts +1 -1
- 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 +3 -1
- package/dist/api/predictions.js +6 -0
- package/dist/api/projects.d.ts +21 -0
- package/dist/api/projects.js +24 -0
- package/dist/api/promote.js +1 -1
- package/dist/api/prompt-hook.d.ts +15 -2
- package/dist/api/prompt-hook.js +44 -4
- package/dist/api/recall-cli.d.ts +3 -0
- package/dist/api/recall-cli.js +13 -4
- package/dist/api/recall-core.js +3 -3
- package/dist/api/recall-pipeline.js +6 -7
- package/dist/api/recall-request.js +1 -1
- package/dist/api/recall.d.ts +0 -3
- package/dist/api/recall.js +19 -44
- package/dist/api/remember-local.js +1 -1
- package/dist/api/remember.d.ts +2 -1
- package/dist/api/remember.js +3 -2
- package/dist/api/session-end.d.ts +22 -0
- package/dist/api/session-end.js +101 -0
- package/dist/api/sleep-run.d.ts +1 -1
- package/dist/api/sleep-run.js +13 -9
- 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.js +1 -1
- package/dist/api/types.d.ts +2 -0
- package/dist/api/types.js +6 -1
- 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.js +36 -95
- package/dist/capture/compact.js +10 -5
- package/dist/capture/compaction-items-caller.js +11 -20
- package/dist/capture/compaction-record.d.ts +7 -93
- package/dist/capture/compaction-record.js +29 -426
- package/dist/capture/compaction-spool.d.ts +4 -2
- package/dist/capture/compaction-spool.js +20 -6
- 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.js +4 -3
- package/dist/capture/session-end-caller.js +2 -1
- package/dist/capture/session-worker.js +3 -4
- package/dist/capture/transcript.d.ts +2 -1
- package/dist/capture/transcript.js +6 -3
- package/dist/capture/working-state.d.ts +4 -2
- package/dist/capture/working-state.js +4 -2
- package/dist/cli/audit-prune.d.ts +0 -25
- package/dist/cli/audit-prune.js +1 -27
- package/dist/cli/audit.js +13 -13
- package/dist/cli/auth.d.ts +1 -1
- package/dist/cli/auth.js +12 -13
- package/dist/cli/briefs.d.ts +1 -4
- package/dist/cli/briefs.js +37 -292
- package/dist/cli/card.js +41 -33
- package/dist/cli/client.d.ts +5 -0
- package/dist/cli/client.js +24 -8
- package/dist/cli/compact-resume-payload.js +1 -1
- package/dist/cli/context.d.ts +1 -1
- package/dist/cli/context.js +12 -12
- package/dist/cli/continuity.d.ts +1 -1
- package/dist/cli/continuity.js +36 -39
- package/dist/cli/curate.d.ts +1 -1
- package/dist/cli/curate.js +23 -27
- package/dist/cli/dag.d.ts +1 -1
- package/dist/cli/dag.js +23 -8
- package/dist/cli/decisions.d.ts +0 -2
- package/dist/cli/decisions.js +4 -281
- package/dist/cli/eval.d.ts +1 -1
- package/dist/cli/eval.js +12 -13
- package/dist/cli/explain.d.ts +1 -1
- package/dist/cli/explain.js +21 -25
- package/dist/cli/flag-values.js +16 -6
- package/dist/cli/flags.d.ts +0 -289
- package/dist/cli/flags.js +3 -138
- package/dist/cli/graph.d.ts +3 -0
- package/dist/cli/graph.js +83 -0
- package/dist/cli/hook-runtime.d.ts +3 -5
- package/dist/cli/hook-runtime.js +7 -34
- package/dist/cli/incidents.d.ts +3 -0
- package/dist/cli/incidents.js +112 -0
- package/dist/cli/init.d.ts +1 -1
- package/dist/cli/init.js +28 -19
- package/dist/cli/install-steps.d.ts +2 -1
- package/dist/cli/install-steps.js +11 -3
- package/dist/cli/last-sleep.js +1 -1
- package/dist/cli/lenient-id.d.ts +2 -0
- package/dist/cli/lenient-id.js +13 -0
- package/dist/cli/maintenance.d.ts +3 -3
- package/dist/cli/maintenance.js +29 -30
- package/dist/cli/notes.d.ts +2 -0
- package/dist/cli/notes.js +41 -0
- package/dist/cli/open-browser.d.ts +14 -0
- package/dist/cli/open-browser.js +26 -0
- package/dist/cli/playbooks.d.ts +3 -4
- package/dist/cli/playbooks.js +126 -290
- package/dist/cli/predictions.d.ts +3 -0
- package/dist/cli/predictions.js +175 -0
- package/dist/cli/print.js +2 -1
- package/dist/cli/projects.js +30 -22
- package/dist/cli/quality-repair-once.d.ts +1 -1
- package/dist/cli/quality-repair-once.js +6 -5
- package/dist/cli/recall.js +13 -7
- package/dist/cli/refine-llm.js +17 -17
- package/dist/cli/remember.js +12 -12
- package/dist/cli/scheduler.js +2 -1
- package/dist/cli/serve.js +3 -3
- package/dist/cli/session-hooks.d.ts +1 -1
- package/dist/cli/session-hooks.js +45 -115
- package/dist/cli/setup.d.ts +1 -1
- package/dist/cli/setup.js +17 -10
- package/dist/cli/shared.d.ts +2 -6
- package/dist/cli/shared.js +9 -29
- package/dist/cli/sleep-render.js +6 -3
- package/dist/cli/sleep.js +6 -37
- package/dist/cli/status.d.ts +3 -3
- package/dist/cli/status.js +32 -35
- package/dist/cli/transfer.d.ts +1 -1
- package/dist/cli/transfer.js +33 -31
- package/dist/cli/usage.d.ts +0 -79
- package/dist/cli/usage.js +1 -695
- 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 -272
- package/dist/cli.js +23 -313
- package/dist/connectors/dlq.d.ts +39 -3
- package/dist/connectors/dlq.js +37 -3
- package/dist/connectors/github/backfill.js +12 -3
- package/dist/connectors/github/dlq.js +31 -73
- package/dist/connectors/github/ingest.d.ts +2 -6
- package/dist/connectors/github/ingest.js +3 -28
- package/dist/connectors/github/webhook.d.ts +2 -1
- package/dist/connectors/github/webhook.js +33 -2
- package/dist/connectors/ingest.d.ts +10 -0
- package/dist/connectors/ingest.js +28 -0
- package/dist/connectors/slack/dlq.js +49 -71
- package/dist/connectors/slack/ingest.d.ts +2 -6
- package/dist/connectors/slack/ingest.js +2 -27
- package/dist/connectors/slack/webhook.d.ts +2 -1
- package/dist/connectors/slack/webhook.js +2 -1
- package/dist/consolidate/conflicts.js +1 -1
- package/dist/consolidate/dag.js +15 -9
- package/dist/consolidate/dedupe.d.ts +7 -0
- package/dist/consolidate/dedupe.js +5 -3
- package/dist/consolidate/llm-passes.js +45 -19
- package/dist/consolidate/memory-value.js +2 -1
- package/dist/consolidate/merge.js +2 -2
- package/dist/consolidate/physics-pass.d.ts +6 -1
- package/dist/consolidate/physics-pass.js +26 -6
- package/dist/consolidate/replay.js +11 -4
- package/dist/consolidate/sleep.js +8 -5
- package/dist/consolidate/traces.js +3 -3
- package/dist/core/ablation.d.ts +10 -0
- package/dist/core/ablation.js +12 -0
- package/dist/{sharing/scope.d.ts → core/active-scope.d.ts} +1 -1
- package/dist/{sharing/scope.js → core/active-scope.js} +1 -1
- package/dist/core/ambient.d.ts +4 -0
- package/dist/core/ambient.js +39 -18
- package/dist/core/api-errors.d.ts +16 -0
- package/dist/core/api-errors.js +20 -0
- package/dist/core/card.js +3 -1
- package/dist/core/compaction-timing.d.ts +7 -0
- package/dist/core/compaction-timing.js +9 -0
- package/dist/core/config.d.ts +1 -1
- package/dist/core/config.js +7 -2
- package/dist/core/cosine.d.ts +3 -0
- package/dist/core/cosine.js +19 -0
- package/dist/{store → core}/markdown.d.ts +1 -1
- package/dist/{store → core}/markdown.js +2 -2
- package/dist/core/memory-audit.d.ts +17 -0
- package/dist/core/memory-audit.js +54 -0
- package/dist/core/memory.d.ts +10 -4
- package/dist/core/memory.js +25 -18
- package/dist/{consolidate → core}/merged-row.d.ts +1 -1
- package/dist/{consolidate → core}/merged-row.js +1 -1
- package/dist/core/physics.js +6 -16
- package/dist/core/prediction.d.ts +3 -0
- package/dist/core/prediction.js +6 -0
- package/dist/core/project-identity.d.ts +3 -0
- package/dist/core/project-identity.js +10 -1
- package/dist/{store → core}/recall-scope.d.ts +1 -10
- package/dist/{store → core}/recall-scope.js +2 -19
- package/dist/db/busy.d.ts +2 -7
- package/dist/db/busy.js +21 -26
- package/dist/db/connect.d.ts +0 -1
- package/dist/db/connect.js +5 -6
- package/dist/db/index.d.ts +3 -3
- package/dist/db/index.js +3 -3
- package/dist/db/migrations/index.d.ts +1 -1
- package/dist/db/migrations/index.js +3 -1
- package/dist/db/migrations/v55.d.ts +3 -0
- package/dist/db/migrations/v55.js +17 -0
- package/dist/db/open.d.ts +0 -2
- package/dist/db/open.js +6 -10
- package/dist/db/physics-state.js +3 -3
- package/dist/db/tables.d.ts +2 -0
- package/dist/db/tables.js +6 -2
- package/dist/db/vector-store.js +17 -4
- package/dist/db/wal-checkpointer.js +2 -1
- package/dist/doctor.js +11 -8
- package/dist/embeddings/local.d.ts +62 -0
- package/dist/embeddings/local.js +146 -0
- package/dist/{store/embeddings → embeddings}/provider.d.ts +5 -2
- package/dist/{store/embeddings → embeddings}/provider.js +18 -15
- 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 +1 -1
- package/dist/eval/eval-suite.js +17 -11
- package/dist/eval/eval.js +1 -1
- package/dist/eval/judgment.js +11 -4
- package/dist/graph/extract.js +3 -3
- package/dist/graph/recall.js +1 -1
- package/dist/graph/view.js +13 -5
- 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 +2 -1
- package/dist/hooks/json-hooks.js +4 -2
- package/dist/hooks/opencode.js +8 -5
- package/dist/hooks/shared.d.ts +0 -6
- package/dist/hooks/shared.js +4 -15
- package/dist/importers/core.js +1 -1
- package/dist/importers/sources.js +5 -4
- package/dist/importers/vault.js +7 -5
- package/dist/index.d.ts +3 -2
- package/dist/index.js +3 -2
- package/dist/learn/autolearn.d.ts +10 -2
- package/dist/learn/autolearn.js +32 -12
- package/dist/learn/churn-git.js +13 -4
- package/dist/learn/extract.d.ts +3 -2
- package/dist/learn/extract.js +6 -4
- package/dist/learn/forward-claim-detector.js +4 -2
- package/dist/learn/invalidation.js +10 -6
- package/dist/mcp/admin-tools.d.ts +2 -2
- package/dist/mcp/admin-tools.js +27 -48
- 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 +3 -1
- package/dist/mcp/protocol.d.ts +11 -7
- package/dist/mcp/protocol.js +25 -12
- package/dist/mcp/recall-tools.js +12 -9
- package/dist/mcp/request.js +2 -1
- package/dist/mcp/stdio.js +24 -8
- package/dist/mcp/tool-args.js +2 -1
- package/dist/mcp/tools.js +44 -21
- package/dist/objects/customer-notes.d.ts +2 -2
- package/dist/objects/decisions.d.ts +2 -2
- package/dist/objects/descriptor.d.ts +1 -1
- package/dist/objects/incidents.d.ts +2 -2
- package/dist/objects/lifecycle.d.ts +1 -1
- package/dist/objects/lifecycle.js +2 -1
- package/dist/objects/policies.d.ts +2 -2
- package/dist/objects/policies.js +2 -1
- package/dist/objects/processes.d.ts +2 -2
- package/dist/objects/project-briefs.d.ts +2 -2
- package/dist/objects/project-briefs.js +2 -3
- package/dist/objects/skills.d.ts +2 -2
- package/dist/postinstall.js +1 -1
- package/dist/rerankers/clef.js +3 -6
- package/dist/rerankers/cross-encoder.d.ts +31 -2
- package/dist/rerankers/cross-encoder.js +63 -97
- package/dist/rerankers/index.js +5 -4
- package/dist/rerankers/jev.js +2 -4
- package/dist/rerankers/outage-warning.d.ts +3 -1
- package/dist/rerankers/outage-warning.js +5 -3
- package/dist/search/bm25-search.js +1 -1
- package/dist/search/boosts.js +1 -1
- package/dist/search/embed-memories.d.ts +9 -0
- package/dist/search/embed-memories.js +377 -0
- package/dist/search/goal-boost.d.ts +1 -1
- package/dist/search/goal-boost.js +6 -3
- package/dist/search/hybrid.d.ts +9 -2
- package/dist/search/hybrid.js +9 -4
- package/dist/search/physics-search.d.ts +6 -3
- package/dist/search/physics-search.js +22 -15
- package/dist/search/rerank.js +1 -1
- package/dist/search/vector.d.ts +8 -6
- package/dist/search/vector.js +10 -13
- package/dist/server/auth.d.ts +2 -0
- package/dist/server/auth.js +17 -7
- package/dist/server/boot.js +7 -66
- package/dist/server/client-ip.d.ts +0 -2
- package/dist/server/client-ip.js +3 -2
- package/dist/server/deadline.d.ts +0 -2
- package/dist/server/deadline.js +1 -7
- package/dist/server/defaults.d.ts +1 -0
- package/dist/server/defaults.js +1 -0
- package/dist/server/mcp-http.js +16 -11
- package/dist/server/request.js +7 -2
- 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 -132
- package/dist/server/routes/admin.d.ts +8 -8
- package/dist/server/routes/admin.js +13 -21
- package/dist/server/routes/customer-notes.d.ts +6 -6
- package/dist/server/routes/customer-notes.js +1 -2
- package/dist/server/routes/decisions.d.ts +6 -6
- package/dist/server/routes/decisions.js +2 -4
- package/dist/server/routes/incidents.d.ts +6 -6
- package/dist/server/routes/incidents.js +2 -5
- package/dist/server/routes/memories.d.ts +9 -9
- package/dist/server/routes/memories.js +15 -38
- package/dist/server/routes/object-routes.d.ts +6 -6
- package/dist/server/routes/object-routes.js +4 -7
- package/dist/server/routes/policies.d.ts +7 -7
- package/dist/server/routes/policies.js +2 -4
- package/dist/server/routes/predictions.d.ts +6 -6
- package/dist/server/routes/predictions.js +9 -13
- package/dist/server/routes/processes.d.ts +6 -6
- package/dist/server/routes/processes.js +1 -2
- package/dist/server/routes/project-briefs.d.ts +7 -7
- package/dist/server/routes/project-briefs.js +2 -4
- package/dist/server/routes/recall.d.ts +5 -5
- package/dist/server/routes/recall.js +6 -10
- package/dist/server/routes/skills.d.ts +7 -7
- package/dist/server/routes/skills.js +2 -4
- package/dist/server/server-detect.d.ts +7 -1
- package/dist/server/server-detect.js +36 -11
- package/dist/server/sleep-child.js +26 -7
- package/dist/server/sleep-offload.d.ts +11 -5
- package/dist/server/sleep-offload.js +17 -11
- package/dist/server/types.d.ts +22 -10
- package/dist/server/validation.d.ts +1 -2
- package/dist/server/validation.js +6 -11
- package/dist/server.d.ts +5 -4
- package/dist/server.js +5 -4
- package/dist/sharing/global-store.js +2 -2
- package/dist/sharing/global-sync.js +38 -45
- package/dist/sharing/project-merge.d.ts +7 -14
- package/dist/sharing/project-merge.js +57 -121
- package/dist/sharing/search-both.js +1 -1
- package/dist/sharing/share.d.ts +2 -0
- package/dist/sharing/share.js +37 -34
- package/dist/store/ambient.js +5 -6
- package/dist/store/audit-event.d.ts +1 -1
- package/dist/store/audit.d.ts +0 -16
- package/dist/store/audit.js +4 -55
- package/dist/store/auth.d.ts +4 -2
- package/dist/store/auth.js +7 -3
- package/dist/store/candidates.d.ts +3 -2
- package/dist/store/candidates.js +42 -23
- package/dist/store/capture-write.d.ts +17 -0
- package/dist/store/capture-write.js +35 -0
- package/dist/store/cards.js +1 -1
- 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.js +7 -4
- package/dist/store/connectors/dlq.d.ts +10 -0
- package/dist/store/connectors/dlq.js +32 -0
- package/dist/store/connectors/github.d.ts +7 -9
- package/dist/store/connectors/github.js +30 -53
- package/dist/store/connectors/slack.d.ts +2 -11
- package/dist/store/connectors/slack.js +18 -47
- package/dist/store/dashboard-reads.js +7 -6
- package/dist/store/delete-and-batch.d.ts +6 -0
- package/dist/store/delete-and-batch.js +36 -3
- package/dist/store/delivery-recorder.d.ts +10 -3
- package/dist/store/delivery-recorder.js +12 -5
- package/dist/store/descendant-page.js +6 -3
- package/dist/store/dormant.d.ts +1 -1
- package/dist/store/dormant.js +3 -1
- package/dist/store/embeddings/index.d.ts +2 -12
- package/dist/store/embeddings/index.js +5 -374
- package/dist/store/entry-reads.d.ts +13 -4
- package/dist/store/entry-reads.js +47 -11
- package/dist/store/entry-writes.d.ts +5 -5
- package/dist/store/entry-writes.js +32 -12
- 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.js +20 -18
- package/dist/store/graph-reads.js +4 -2
- package/dist/store/graph-writes.d.ts +6 -6
- package/dist/store/graph-writes.js +48 -71
- package/dist/store/handoffs.d.ts +1 -1
- package/dist/store/handoffs.js +6 -6
- package/dist/store/index-and-stats.js +2 -2
- 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.js +10 -6
- package/dist/store/open.d.ts +0 -4
- package/dist/store/open.js +40 -53
- package/dist/store/pilot-arm.d.ts +12 -0
- package/dist/store/pilot-arm.js +42 -0
- package/dist/store/port.d.ts +9 -3
- package/dist/store/port.js +8 -0
- package/dist/store/predictions.d.ts +1 -2
- package/dist/store/predictions.js +3 -6
- package/dist/store/project-tags.d.ts +62 -0
- package/dist/store/project-tags.js +67 -0
- package/dist/store/quarantine.js +2 -1
- package/dist/store/recall-trace.d.ts +2 -0
- package/dist/store/recall-trace.js +18 -2
- package/dist/store/rejected-values.js +2 -1
- package/dist/store/rejection-probe.d.ts +4 -0
- package/dist/store/rejection-probe.js +19 -0
- package/dist/store/rejection.d.ts +0 -17
- package/dist/store/rejection.js +1 -21
- package/dist/store/rule-sql.d.ts +9 -0
- package/dist/store/rule-sql.js +21 -2
- package/dist/store/search-rows.js +9 -4
- package/dist/store/sessions.js +4 -2
- 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 +4 -7
- package/dist/store/sqlite/connector-writes-group.js +3 -3
- package/dist/store/sqlite/entry-writes-group.js +2 -2
- package/dist/store/sqlite/error-codec.js +4 -3
- package/dist/store/sqlite/executor.js +10 -4
- 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/object-rows.d.ts +1 -1
- package/dist/store/sqlite/objects-group.d.ts +1 -1
- package/dist/store/sqlite/objects-group.js +1 -1
- package/dist/store/sqlite/store.js +14 -12
- package/dist/store/summaries.d.ts +3 -3
- package/dist/store/summaries.js +5 -4
- package/dist/store/token-ledger.d.ts +0 -7
- package/dist/store/token-ledger.js +0 -35
- package/dist/store/vector-index.js +3 -2
- package/dist/support-bundle.js +2 -3
- package/dist/trust/reject-flow.js +2 -2
- 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 +22 -5
- package/dist/util/chunked.d.ts +3 -0
- package/dist/util/chunked.js +10 -0
- package/dist/util/ellipsize.d.ts +3 -0
- package/dist/util/ellipsize.js +5 -0
- package/dist/util/env.d.ts +2 -1
- package/dist/util/env.js +2 -1
- package/dist/util/format.d.ts +3 -0
- package/dist/util/format.js +6 -0
- package/dist/util/hook-payload.d.ts +8 -0
- package/dist/util/hook-payload.js +37 -0
- package/dist/util/http-retry.d.ts +6 -0
- package/dist/util/http-retry.js +43 -5
- 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 +4 -0
- package/dist/util/log.js +9 -0
- package/dist/util/request-scope.d.ts +3 -1
- package/dist/util/request-scope.js +11 -6
- package/dist/util/secret-detect.js +6 -1
- package/dist/util/sqlite-blocked.d.ts +2 -0
- package/dist/util/sqlite-blocked.js +5 -0
- 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/version.d.ts +1 -1
- package/dist/util/version.js +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/store/embeddings/local.d.ts +0 -15
- package/dist/store/embeddings/local.js +0 -175
- /package/dist/{cli → api}/correction-latency.d.ts +0 -0
- /package/dist/{cli → api}/correction-latency.js +0 -0
- /package/dist/{cli → api}/provenance-coverage.d.ts +0 -0
- /package/dist/{cli → api}/provenance-coverage.js +0 -0
- /package/dist/{store → core}/object-types.d.ts +0 -0
- /package/dist/{store → core}/object-types.js +0 -0
- /package/dist/{capture → util}/compaction-items.d.ts +0 -0
- /package/dist/{capture → util}/compaction-items.js +0 -0
- /package/dist/{store → util}/yaml.d.ts +0 -0
- /package/dist/{store → util}/yaml.js +0 -0
package/dist/cli/status.js
CHANGED
|
@@ -1,17 +1,12 @@
|
|
|
1
1
|
// Read-only report verbs: status, inspect, tokens, failures, provenance, correction latency, doctor and support bundle.
|
|
2
2
|
import { envHomeDir } from '../util/env.js';
|
|
3
|
-
import { evalNow } from '../core/ablation.js';
|
|
3
|
+
import { evalNow, strengthAblation } from '../core/ablation.js';
|
|
4
4
|
import * as path from 'path';
|
|
5
5
|
import * as fs from 'fs';
|
|
6
6
|
import * as os from 'os';
|
|
7
7
|
import { fileURLToPath } from 'node:url';
|
|
8
8
|
import { calculateStrength, calculateRewardFactor, resolveConfidence, Layer } from '../core/memory.js';
|
|
9
|
-
import {
|
|
10
|
-
import { loadStats } from '../store/index-and-stats.js';
|
|
11
|
-
import { loadStatusCounts } from '../store/candidates.js';
|
|
12
|
-
import { embeddingModelRequiresReindex } from '../store/embeddings/index.js';
|
|
13
|
-
import { resolveEmbeddingProvider } from '../store/embeddings/provider.js';
|
|
14
|
-
import { loadStoredParticles, storedVectorSummary } from '../store/vector-index.js';
|
|
9
|
+
import { resolveEmbeddingProvider } from '../embeddings/provider.js';
|
|
15
10
|
import { computeSystemEnergy, vecNorm } from '../core/physics.js';
|
|
16
11
|
import { loadConfig } from '../core/config.js';
|
|
17
12
|
import { runDoctor, formatDoctor } from '../doctor.js';
|
|
@@ -19,10 +14,9 @@ import { buildSupportBundle, TAIL_MAX_LINES } from '../support-bundle.js';
|
|
|
19
14
|
import { PACKAGE_VERSION } from '../util/version.js';
|
|
20
15
|
import { FAILURE_LOG_RETENTION_DAYS } from '../store/failure-log.js';
|
|
21
16
|
import { getGlobalRoot } from '../sharing/global-store.js';
|
|
22
|
-
import { buildProvenanceCoverage } from './provenance-coverage.js';
|
|
23
|
-
import { buildCorrectionLatency } from './correction-latency.js';
|
|
24
17
|
import * as api from '../api/index.js';
|
|
25
18
|
import { getMemory } from '../api/memories.js';
|
|
19
|
+
import { correctionLatencyReport, embeddingReindexNeeded, provenanceCoverageReport, storeStatus, storedParticles, vectorSummary, } from '../api/status.js';
|
|
26
20
|
import { cliApiContext } from './api-context.js';
|
|
27
21
|
import { errorMessage, log } from '../util/log.js';
|
|
28
22
|
import { printError } from './output.js';
|
|
@@ -31,12 +25,12 @@ import { requireInit, resolveAuthRoot } from './shared.js';
|
|
|
31
25
|
import { fmt } from './print.js';
|
|
32
26
|
import { isJsonObject } from '../util/json.js';
|
|
33
27
|
import { hookStoreRoot } from './hook-runtime.js';
|
|
34
|
-
import { DAY_MS } from '../util/time.js';
|
|
28
|
+
import { DAY_MS, HOUR_MS, MINUTE_MS } from '../util/time.js';
|
|
35
29
|
import { CliExit } from './exit.js';
|
|
36
|
-
export function handleStatus({ hippoRoot }) {
|
|
30
|
+
export function handleStatus({ hippoRoot, tenantId }) {
|
|
37
31
|
requireInit(hippoRoot);
|
|
38
|
-
const
|
|
39
|
-
const counts =
|
|
32
|
+
const ctx = cliApiContext(hippoRoot, tenantId);
|
|
33
|
+
const { stats, counts } = storeStatus(ctx, evalNow(), 0.2);
|
|
40
34
|
const { byLayer, byConfidence, pinned, atRisk, agedOut, avgStrength } = counts;
|
|
41
35
|
console.log('Hippo Status');
|
|
42
36
|
console.log('---------------------------');
|
|
@@ -68,14 +62,14 @@ export function handleStatus({ hippoRoot }) {
|
|
|
68
62
|
else {
|
|
69
63
|
console.log(`Last sleep: never`);
|
|
70
64
|
}
|
|
71
|
-
printEmbeddingStatus(
|
|
72
|
-
printPhysicsStatus(
|
|
65
|
+
printEmbeddingStatus(ctx, counts);
|
|
66
|
+
printPhysicsStatus(ctx);
|
|
73
67
|
}
|
|
74
68
|
// Embedding status (provider-aware)
|
|
75
|
-
function printEmbeddingStatus(
|
|
69
|
+
function printEmbeddingStatus(ctx, counts) {
|
|
76
70
|
const embedProvider = (() => {
|
|
77
71
|
try {
|
|
78
|
-
return resolveEmbeddingProvider(hippoRoot);
|
|
72
|
+
return resolveEmbeddingProvider(ctx.hippoRoot);
|
|
79
73
|
}
|
|
80
74
|
catch {
|
|
81
75
|
// Status reports a bad provider config as "misconfigured" below instead of failing.
|
|
@@ -87,7 +81,7 @@ function printEmbeddingStatus(hippoRoot, counts) {
|
|
|
87
81
|
console.log(`Embeddings: misconfigured (check embeddings.provider / apiBaseUrl), BM25 only`);
|
|
88
82
|
return;
|
|
89
83
|
}
|
|
90
|
-
const embeddingsDisabled = loadConfig(hippoRoot).embeddings.enabled === false;
|
|
84
|
+
const embeddingsDisabled = loadConfig(ctx.hippoRoot).embeddings.enabled === false;
|
|
91
85
|
const embAvail = embedProvider.isAvailable();
|
|
92
86
|
if (embeddingsDisabled) {
|
|
93
87
|
console.log(`Embeddings: disabled in config (embeddings.enabled = false), BM25 only`);
|
|
@@ -103,7 +97,7 @@ function printEmbeddingStatus(hippoRoot, counts) {
|
|
|
103
97
|
}
|
|
104
98
|
// Show cached counts whenever vectors exist on disk (even when disabled or
|
|
105
99
|
// the key was removed), so the user still sees what is already indexed.
|
|
106
|
-
const { ids: embeddedIds, dims } =
|
|
100
|
+
const { ids: embeddedIds, dims } = vectorSummary(ctx);
|
|
107
101
|
if (!embAvail && embeddedIds.size === 0)
|
|
108
102
|
return;
|
|
109
103
|
const orphaned = embeddedIds.size - counts.embedded;
|
|
@@ -114,23 +108,24 @@ function printEmbeddingStatus(hippoRoot, counts) {
|
|
|
114
108
|
line += ` (${orphaned} orphaned, run \`hippo embed\` to prune)`;
|
|
115
109
|
console.log(line);
|
|
116
110
|
// No index argument: the check then asks SQLite whether any vector exists instead of loading them.
|
|
117
|
-
if (
|
|
111
|
+
if (embeddingReindexNeeded(ctx, embedProvider.id)) {
|
|
118
112
|
console.log(` model changed, run \`hippo embed\` to reindex`);
|
|
119
113
|
}
|
|
120
114
|
}
|
|
121
115
|
// The all-pairs energy sum is quadratic, so a large particle set skips it.
|
|
122
116
|
const PHYSICS_ENERGY_STATUS_MAX = 2000;
|
|
123
117
|
// Physics status
|
|
124
|
-
function printPhysicsStatus(
|
|
118
|
+
function printPhysicsStatus(ctx) {
|
|
125
119
|
try {
|
|
126
|
-
const particles =
|
|
120
|
+
const particles = storedParticles(ctx);
|
|
127
121
|
if (particles.length > 0) {
|
|
128
122
|
let sumVelMag = 0;
|
|
129
123
|
for (const p of particles)
|
|
130
124
|
sumVelMag += vecNorm(p.velocity);
|
|
131
125
|
const avgVelMag = sumVelMag / particles.length;
|
|
132
126
|
console.log('');
|
|
133
|
-
console.log(`Physics: ${particles.length} particles,
|
|
127
|
+
console.log(`Physics: ${particles.length} particles, ` +
|
|
128
|
+
`${physicsEnergyText(particles, loadConfig(ctx.hippoRoot).physics.G_memory)}, avg vel: ${fmt(avgVelMag, 4)}`);
|
|
134
129
|
}
|
|
135
130
|
}
|
|
136
131
|
catch (err) {
|
|
@@ -152,7 +147,7 @@ async function cmdInspect(hippoRoot, tenantId, id) {
|
|
|
152
147
|
throw new CliExit(1);
|
|
153
148
|
}
|
|
154
149
|
const now = evalNow();
|
|
155
|
-
const currentStrength = calculateStrength(entry, now);
|
|
150
|
+
const currentStrength = calculateStrength(entry, now, { ablation: strengthAblation() });
|
|
156
151
|
const lastRetrieved = new Date(entry.last_retrieved);
|
|
157
152
|
const created = new Date(entry.created);
|
|
158
153
|
const ageDays = (now.getTime() - created.getTime()) / DAY_MS;
|
|
@@ -171,7 +166,7 @@ async function cmdInspect(hippoRoot, tenantId, id) {
|
|
|
171
166
|
console.log(`Schema fit: ${entry.schema_fit}`);
|
|
172
167
|
console.log(`Pinned: ${entry.pinned}`);
|
|
173
168
|
console.log(`Tags: ${entry.tags.join(', ') || 'none'}`);
|
|
174
|
-
const rewardFactor = calculateRewardFactor(entry);
|
|
169
|
+
const rewardFactor = calculateRewardFactor(entry, strengthAblation());
|
|
175
170
|
const pos = entry.outcome_positive ?? 0;
|
|
176
171
|
const neg = entry.outcome_negative ?? 0;
|
|
177
172
|
const outcomeLabel = pos === 0 && neg === 0
|
|
@@ -257,9 +252,9 @@ export function handleFailures({ hippoRoot, tenantId, flags }) {
|
|
|
257
252
|
console.log(`\n Repeats: ${summary.repeats} of ${summary.rated} errors first happened in another session.${unrated}`);
|
|
258
253
|
}
|
|
259
254
|
}
|
|
260
|
-
export function handleCorrectionLatency({ hippoRoot, flags }) {
|
|
255
|
+
export function handleCorrectionLatency({ hippoRoot, tenantId, flags }) {
|
|
261
256
|
requireInit(hippoRoot);
|
|
262
|
-
const report =
|
|
257
|
+
const report = correctionLatencyReport(cliApiContext(hippoRoot, tenantId));
|
|
263
258
|
if (flags['json']) {
|
|
264
259
|
console.log(JSON.stringify(report, null, 2));
|
|
265
260
|
}
|
|
@@ -272,11 +267,11 @@ export function handleCorrectionLatency({ hippoRoot, flags }) {
|
|
|
272
267
|
return 'n/a';
|
|
273
268
|
if (ms < 1000)
|
|
274
269
|
return `${ms}ms`;
|
|
275
|
-
if (ms <
|
|
270
|
+
if (ms < MINUTE_MS)
|
|
276
271
|
return `${(ms / 1000).toFixed(1)}s`;
|
|
277
|
-
if (ms <
|
|
278
|
-
return `${(ms /
|
|
279
|
-
return `${(ms /
|
|
272
|
+
if (ms < HOUR_MS)
|
|
273
|
+
return `${(ms / MINUTE_MS).toFixed(1)}m`;
|
|
274
|
+
return `${(ms / HOUR_MS).toFixed(1)}h`;
|
|
280
275
|
};
|
|
281
276
|
console.log(`Corrections: ${report.count} total (${report.extractionCount} extraction-driven, ${report.manualCount} manual)`);
|
|
282
277
|
console.log(`Latency p50: ${fmt(report.p50Ms)}, p95: ${fmt(report.p95Ms)}, max: ${fmt(report.maxMs)}`);
|
|
@@ -286,9 +281,9 @@ export function handleCorrectionLatency({ hippoRoot, flags }) {
|
|
|
286
281
|
}
|
|
287
282
|
}
|
|
288
283
|
}
|
|
289
|
-
export function handleProvenance({ hippoRoot, flags }) {
|
|
284
|
+
export function handleProvenance({ hippoRoot, tenantId, flags }) {
|
|
290
285
|
requireInit(hippoRoot);
|
|
291
|
-
const coverage =
|
|
286
|
+
const coverage = provenanceCoverageReport(cliApiContext(hippoRoot, tenantId));
|
|
292
287
|
if (flags['json']) {
|
|
293
288
|
console.log(JSON.stringify(coverage, null, 2));
|
|
294
289
|
}
|
|
@@ -345,8 +340,10 @@ export function handleSupportBundle({ flags }) {
|
|
|
345
340
|
const kb = Math.round(Buffer.byteLength(json) / 1024);
|
|
346
341
|
console.log(`Wrote ${file} (${kb} KB).`);
|
|
347
342
|
console.log(includeLogs
|
|
348
|
-
? `It holds versions, doctor checks, config with secrets removed, store counts, and the last ${TAIL_MAX_LINES} lines of
|
|
349
|
-
|
|
343
|
+
? `It holds versions, doctor checks, config with secrets removed, store counts, and the last ${TAIL_MAX_LINES} lines of ` +
|
|
344
|
+
'each hippo log with known secret shapes removed. Those log lines can quote memory text. Read it before you attach it to a ticket.'
|
|
345
|
+
: 'It holds versions, doctor checks, config with secrets removed, store counts and log file names. It never holds memory text. Read it before you ' +
|
|
346
|
+
'attach it to a ticket.');
|
|
350
347
|
}
|
|
351
348
|
export async function handleInspect({ hippoRoot, tenantId, args }) {
|
|
352
349
|
const id = args[0];
|
package/dist/cli/transfer.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { type CommandContext } from './flag-values.js';
|
|
2
|
-
export declare function handleLearn({ hippoRoot, flags }: CommandContext): void;
|
|
2
|
+
export declare function handleLearn({ hippoRoot, tenantId, flags }: CommandContext): void;
|
|
3
3
|
export declare function handleImport({ hippoRoot, tenantId, args, flags }: CommandContext): void;
|
|
4
4
|
export declare function handleSync({ hippoRoot, flags }: CommandContext): void;
|
|
5
5
|
export declare function handleWatch({ hippoRoot, tenantId, args }: CommandContext): Promise<void>;
|
package/dist/cli/transfer.js
CHANGED
|
@@ -1,29 +1,27 @@
|
|
|
1
1
|
// Verbs that move memories in and out: watch, learn, import, export, promote, sync, share and peers.
|
|
2
2
|
import * as path from 'path';
|
|
3
3
|
import * as fs from 'fs';
|
|
4
|
-
import { isInitialized } from '../
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import { embedAll } from '../store/embeddings/index.js';
|
|
8
|
-
import { loadEmbeddingIndex } from '../store/vector-index.js';
|
|
4
|
+
import { isInitialized } from '../core/project-identity.js';
|
|
5
|
+
import { RejectedValueError } from '../core/api-errors.js';
|
|
6
|
+
import { embedCoverage, embedMissingMemories } from '../api/embeddings.js';
|
|
9
7
|
import { captureError, runWatched } from '../learn/autolearn.js';
|
|
10
8
|
import { currentMachine, importAtSessionEnd, importForStore } from '../agent-memories/sync.js';
|
|
11
9
|
import { detailLines } from '../agent-memories/report.js';
|
|
12
10
|
import { getGlobalRoot, initGlobal } from '../sharing/global-store.js';
|
|
13
|
-
import { shareMemory, listPeers, autoShare, transferScore } from '../sharing/share.js';
|
|
11
|
+
import { AUTO_SHARE_MIN_SCORE, shareMemory, listPeers, autoShare, transferScore } from '../sharing/share.js';
|
|
14
12
|
import { syncGlobalToLocal } from '../sharing/global-sync.js';
|
|
15
13
|
import { importChatGPT, importClaude, importCursor, importGenericFile, } from '../importers/sources.js';
|
|
16
14
|
import { importMarkdown } from '../importers/markdown.js';
|
|
17
15
|
import { importVault } from '../importers/vault.js';
|
|
18
16
|
import * as api from '../api/index.js';
|
|
19
|
-
import { getMemory } from '../api/memories.js';
|
|
17
|
+
import { getMemory, listMemories } from '../api/memories.js';
|
|
20
18
|
import * as client from './client.js';
|
|
21
19
|
import { cliApiContext } from './api-context.js';
|
|
22
20
|
import { printError } from './output.js';
|
|
23
21
|
import { errorMessage, log } from '../util/log.js';
|
|
24
22
|
import { requireInit, runViaServerIfAvailable, learnFromRepo } from './shared.js';
|
|
25
23
|
import { fmt } from './print.js';
|
|
26
|
-
import { boolFlag, flagIsTrue, isStringFlag, nonEmptyStringFlag } from './flag-values.js';
|
|
24
|
+
import { boolFlag, flagIsTrue, isStringFlag, nonEmptyStringFlag, numberFlag } from './flag-values.js';
|
|
27
25
|
import { CONTENT_PREVIEW_CHARS, DATE_PREFIX_CHARS } from '../util/token-text.js';
|
|
28
26
|
import { CliExit } from './exit.js';
|
|
29
27
|
const STDERR_PREVIEW_CHARS = 80;
|
|
@@ -71,13 +69,13 @@ async function cmdWatch(command, hippoRoot, tenantId) {
|
|
|
71
69
|
throw new CliExit(exitCode);
|
|
72
70
|
}
|
|
73
71
|
// Learn command
|
|
74
|
-
export function handleLearn({ hippoRoot, flags }) {
|
|
72
|
+
export function handleLearn({ hippoRoot, tenantId, flags }) {
|
|
75
73
|
requireInit(hippoRoot);
|
|
76
74
|
if (!flags['git']) {
|
|
77
75
|
printError('Usage: hippo learn --git [--days <n>] [--repos <paths>]');
|
|
78
76
|
throw new CliExit(1);
|
|
79
77
|
}
|
|
80
|
-
const days =
|
|
78
|
+
const days = numberFlag(flags, 'days') ?? 7;
|
|
81
79
|
console.log(`Scanning git log for the last ${days} days...`);
|
|
82
80
|
const reposFlag = nonEmptyStringFlag(flags, 'repos');
|
|
83
81
|
if (reposFlag) {
|
|
@@ -86,30 +84,36 @@ export function handleLearn({ hippoRoot, flags }) {
|
|
|
86
84
|
let totalSkipped = 0;
|
|
87
85
|
for (const repo of repos) {
|
|
88
86
|
const label = path.basename(repo);
|
|
89
|
-
const { added, skipped } = learnFromRepo(hippoRoot, repo, days, label);
|
|
87
|
+
const { added, skipped } = learnFromRepo(hippoRoot, tenantId, repo, days, label);
|
|
90
88
|
totalAdded += added;
|
|
91
89
|
totalSkipped += skipped;
|
|
92
90
|
}
|
|
93
91
|
console.log(`Git learn complete: ${totalAdded} new lessons added, ${totalSkipped} duplicates skipped across ${repos.length} repos.`);
|
|
94
92
|
}
|
|
95
93
|
else {
|
|
96
|
-
const { added, skipped } = learnFromRepo(hippoRoot, process.cwd(), days);
|
|
94
|
+
const { added, skipped } = learnFromRepo(hippoRoot, tenantId, process.cwd(), days);
|
|
97
95
|
console.log(`Git learn complete: ${added} new lessons added, ${skipped} duplicates skipped.`);
|
|
98
96
|
}
|
|
99
97
|
}
|
|
100
98
|
// Import command
|
|
101
99
|
/** The rows are saved either way; a failed backfill only delays vectors, so it warns with how many wait and the command that finishes them. */
|
|
102
|
-
function warnBackfillFailed(
|
|
100
|
+
function warnBackfillFailed(ctx, embedCommand, err) {
|
|
103
101
|
let waiting;
|
|
104
102
|
try {
|
|
105
|
-
const
|
|
106
|
-
|
|
103
|
+
const { memoryIds, vectorIds } = embedCoverage(ctx);
|
|
104
|
+
const embedded = new Set(vectorIds);
|
|
105
|
+
waiting = String(memoryIds.filter((id) => !embedded.has(id)).length);
|
|
107
106
|
}
|
|
108
107
|
catch (countErr) {
|
|
109
108
|
waiting = `an unknown number of (count failed: ${errorMessage(countErr)})`;
|
|
110
109
|
}
|
|
111
110
|
log.warn(`import: embedding backfill failed (${errorMessage(err)}); ${waiting} rows have no vector; run '${embedCommand}' to backfill`);
|
|
112
111
|
}
|
|
112
|
+
/** Batch-embed freshly imported rows. The floating promise is deliberate: libuv keeps the process alive until it settles, and awaiting
|
|
113
|
+
* would block the CLI on model load; `hippo embed` is the backstop if interrupted. */
|
|
114
|
+
function backfillVectors(ctx, embedCommand) {
|
|
115
|
+
void embedMissingMemories(ctx).catch((err) => warnBackfillFailed(ctx, embedCommand, err));
|
|
116
|
+
}
|
|
113
117
|
function warnRedacted(count) {
|
|
114
118
|
if (count)
|
|
115
119
|
printError(`Warning: secret-shaped text was redacted from ${count} imported ${count === 1 ? 'entry' : 'entries'} before storing`);
|
|
@@ -141,7 +145,7 @@ export function handleImport({ hippoRoot, tenantId, args, flags }) {
|
|
|
141
145
|
// so the tenant is resolved and passed through. --global is unsupported (the connector raw-archive path is tenant-local).
|
|
142
146
|
if (flags['vault'])
|
|
143
147
|
return importVaultFolder(hippoRoot, tenantId, flags, importOptions, useGlobal, dryRun);
|
|
144
|
-
importFromFile(targetRoot, args, flags, { importOptions, useGlobal, dryRun });
|
|
148
|
+
importFromFile(targetRoot, args, flags, { importOptions, useGlobal, dryRun, tenantId });
|
|
145
149
|
}
|
|
146
150
|
// Determine which importer to use based on flag
|
|
147
151
|
function pickImporter(args, flags) {
|
|
@@ -161,7 +165,7 @@ function pickImporter(args, flags) {
|
|
|
161
165
|
return { filePath: undefined, importer: undefined, importerName: '' };
|
|
162
166
|
}
|
|
163
167
|
function importFromFile(targetRoot, args, flags, options) {
|
|
164
|
-
const { importOptions, useGlobal, dryRun } = options;
|
|
168
|
+
const { importOptions, useGlobal, dryRun, tenantId } = options;
|
|
165
169
|
const { filePath, importer, importerName } = pickImporter(args, flags);
|
|
166
170
|
if (!filePath || !importer) {
|
|
167
171
|
printError('Usage: hippo import <--chatgpt|--claude|--cursor|--file|--markdown|--vault> <path>, or hippo import --agents [--dry-run]');
|
|
@@ -172,10 +176,9 @@ function importFromFile(targetRoot, args, flags, options) {
|
|
|
172
176
|
throw new CliExit(1);
|
|
173
177
|
}
|
|
174
178
|
const result = importer(filePath, importOptions);
|
|
175
|
-
//
|
|
176
|
-
// alive until it settles; do not await it, that would block the CLI on model load. `hippo embed` is the backstop if interrupted.
|
|
179
|
+
// The importers' writeEntry sites don't embed, so the new rows are embedded here in one pass.
|
|
177
180
|
if (!dryRun && result.imported >= 1) {
|
|
178
|
-
|
|
181
|
+
backfillVectors(cliApiContext(targetRoot, tenantId), useGlobal ? 'hippo embed --global' : 'hippo embed');
|
|
179
182
|
}
|
|
180
183
|
const storeLabel = useGlobal ? `global (${getGlobalRoot()})` : targetRoot;
|
|
181
184
|
printFileImportSummary(result, importerName, filePath, storeLabel, dryRun);
|
|
@@ -226,7 +229,7 @@ function importVaultFolder(hippoRoot, tenantId, flags, importOptions, useGlobal,
|
|
|
226
229
|
scope: flags['scope'] ? String(flags['scope']) : undefined,
|
|
227
230
|
};
|
|
228
231
|
const vaultResult = importVault(folderPath, vaultOptions);
|
|
229
|
-
printVaultSummary(vaultResult, folderPath, hippoRoot, dryRun);
|
|
232
|
+
printVaultSummary(vaultResult, folderPath, cliApiContext(hippoRoot, tenantId), dryRun);
|
|
230
233
|
}
|
|
231
234
|
function checkVaultArgs(folderPath, flags, useGlobal) {
|
|
232
235
|
if (!fs.existsSync(folderPath) || !fs.statSync(folderPath).isDirectory()) {
|
|
@@ -250,7 +253,7 @@ function checkVaultArgs(folderPath, flags, useGlobal) {
|
|
|
250
253
|
throw new CliExit(1);
|
|
251
254
|
}
|
|
252
255
|
}
|
|
253
|
-
function printVaultSummary(vaultResult, folderPath,
|
|
256
|
+
function printVaultSummary(vaultResult, folderPath, ctx, dryRun) {
|
|
254
257
|
console.log(`\nImport Vault: ${folderPath}${dryRun ? ' (dry run - no writes)' : ''}`);
|
|
255
258
|
console.log(` Notes found: ${vaultResult.total}`);
|
|
256
259
|
console.log(` ${dryRun ? 'Would import: ' : 'Imported: '}${vaultResult.imported}`);
|
|
@@ -260,12 +263,10 @@ function printVaultSummary(vaultResult, folderPath, hippoRoot, dryRun) {
|
|
|
260
263
|
}
|
|
261
264
|
warnRedacted(vaultResult.redacted);
|
|
262
265
|
console.log(` ${dryRun ? 'Would archive: ' : 'Archived (removed): '}${vaultResult.archived ?? 0}`);
|
|
263
|
-
console.log(` Store: ${hippoRoot}`);
|
|
264
|
-
//
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
void embedAll(hippoRoot).catch((err) => warnBackfillFailed(hippoRoot, 'hippo embed', err));
|
|
268
|
-
}
|
|
266
|
+
console.log(` Store: ${ctx.hippoRoot}`);
|
|
267
|
+
// Vault rows write through api.remember, which never embeds, so backfill them as the single-file import does.
|
|
268
|
+
if (!dryRun && vaultResult.imported >= 1)
|
|
269
|
+
backfillVectors(ctx, 'hippo embed');
|
|
269
270
|
}
|
|
270
271
|
// Promote command
|
|
271
272
|
function cmdPromote(hippoRoot, tenantId, id) {
|
|
@@ -296,7 +297,8 @@ export function handleSync({ hippoRoot, flags }) {
|
|
|
296
297
|
// v39: other-project rows are skipped by default; secrets always are.
|
|
297
298
|
const includeCrossProject = flagIsTrue(flags, 'cross-project');
|
|
298
299
|
const count = syncGlobalToLocal(hippoRoot, globalRoot, { includeCrossProject });
|
|
299
|
-
console.log(`Synced ${count} global memories into local project.${includeCrossProject ? '' : ' (other-project rows skipped; use --cross-project to
|
|
300
|
+
console.log(`Synced ${count} global memories into local project.${includeCrossProject ? '' : ' (other-project rows skipped; use --cross-project to ' +
|
|
301
|
+
'include them)'}`);
|
|
300
302
|
}
|
|
301
303
|
export async function handleWatch({ hippoRoot, tenantId, args }) {
|
|
302
304
|
const watchCmd = args.join(' ').trim();
|
|
@@ -327,7 +329,7 @@ export async function handleShare({ hippoRoot, tenantId, args, flags }) {
|
|
|
327
329
|
if (shareId === '--auto' || flags['auto']) {
|
|
328
330
|
// Auto-share mode
|
|
329
331
|
requireInit(hippoRoot);
|
|
330
|
-
const minScore =
|
|
332
|
+
const minScore = numberFlag(flags, 'min-score') ?? AUTO_SHARE_MIN_SCORE;
|
|
331
333
|
const dryRun = boolFlag(flags, 'dry-run');
|
|
332
334
|
const results = autoShare(hippoRoot, { minScore, dryRun, tenantId });
|
|
333
335
|
if (results.length === 0) {
|
|
@@ -393,7 +395,7 @@ export function handleExport({ hippoRoot, tenantId, args, flags }) {
|
|
|
393
395
|
requireInit(hippoRoot);
|
|
394
396
|
const format = String(flags['format'] || 'json');
|
|
395
397
|
const outputPath = args[0] || null;
|
|
396
|
-
const entries =
|
|
398
|
+
const entries = listMemories(cliApiContext(hippoRoot, tenantId));
|
|
397
399
|
let output;
|
|
398
400
|
if (format === 'markdown' || format === 'md') {
|
|
399
401
|
output = entries.map(e => {
|
package/dist/cli/usage.d.ts
CHANGED
|
@@ -3,83 +3,4 @@ export declare function printSlackBackfillUsage(): void;
|
|
|
3
3
|
export declare function printSlackWorkspacesUsage(): void;
|
|
4
4
|
export declare const USAGE_HEADER = "\nHippo - Make your agent's memory work like a brain. Hippo is long-term memory for coding agents.\n\nUsage: hippo <command> [options]\n\nCommands:";
|
|
5
5
|
export declare const USAGE_EXAMPLES = "\n\nExamples:\n hippo init\n hippo remember \"FRED cache can silently drop series\" --tag error\n hippo recall \"data pipeline issues\" --budget 2000\n hippo context --auto --budget 1500\n hippo conflicts\n hippo reject mem_abc123 --reason \"leaked credential\"\n hippo reject --value \"never store my key again\" --reason \"secret\"\n hippo rejections\n hippo unreject a1b2c3d4e5f6\n hippo dormant \"staging hostname\"\n hippo dormant restore mem_abc123\n hippo tokens --days 7\n hippo session log --id sess_123 --task \"Ship feature\" --type progress --content \"Build is green, next step is docs\"\n hippo session latest --json\n hippo session resume\n hippo snapshot save --task \"Ship feature\" --summary \"Tests are green\" --next-step \"Open the PR\" --session sess_123\n hippo handoff create --summary \"PR is open, tests green\" --next \"Merge after review\" --session sess_123 --artifact src/foo.ts\n hippo handoff create --summary s --constraint a --constraint b --outcome partial --target-runtime codex --card-id c1 --tests pass\n hippo card create --title \"Add cards table\" --repo hippo --depends-on card_abc\n hippo card claim card_abc --runtime codex\n hippo card complete card_abc --outcome success\n hippo card heartbeat card_abc --run 7\n hippo card reclaim\n hippo embed --status\n hippo watch \"npm run build\"\n hippo learn --git --days 30\n hippo promote mem_abc123\n hippo sync\n hippo setup\n hippo hook install claude-code\n hippo decide \"Use PostgreSQL for new services\" --context \"JSONB support\"\n hippo incident \"Prod outage: DB connection pool exhausted\" --context \"spike at 14:00\"\n hippo process new \"Release\" --step \"run tests\" --step \"bump version\" --step \"publish\"\n hippo policy new \"Data retention\" --text \"Delete logs after 90 days\" --from 2026-01-01\n hippo policy asof 2026-03-01 --name \"Data retention\"\n hippo skill new \"Run tests\" --instructions \"npm test before every commit\" --trigger \"before commit\"\n hippo skill export\n hippo brief new \"hippo\" --summary \"Agent-memory library; E2 first-class objects in progress\"\n hippo brief refresh \"hippo\"\n hippo note new \"Acme Corp\" --text \"Renewal call: wants SSO before Q3; champion is the VP Eng\"\n hippo note list --customer \"Acme Corp\" --status active\n hippo graph extract\n hippo invalidate \"REST API\" --dry-run\n hippo invalidate \"REST API\" --reason \"migrated to GraphQL\"\n hippo invalidate --id mem_a1b2c3d4e5f6 --reason \"superseded by new policy\"\n hippo invalidate --churn --dry-run\n hippo export memories.json\n hippo export --format markdown memories.md\n hippo sleep --dry-run\n hippo outcome --good\n hippo status\n";
|
|
6
|
-
/** Each verb's help blocks for the command table, keyed like COMMANDS; a block opens with a newline. */
|
|
7
|
-
export declare const VERB_USAGE: {
|
|
8
|
-
init: string[];
|
|
9
|
-
remember: string[];
|
|
10
|
-
recall: string[];
|
|
11
|
-
drill: string[];
|
|
12
|
-
assemble: string[];
|
|
13
|
-
supersede: string[];
|
|
14
|
-
explain: string[];
|
|
15
|
-
eval: string[];
|
|
16
|
-
trace: string[];
|
|
17
|
-
refine: string[];
|
|
18
|
-
sleep: string[];
|
|
19
|
-
'last-sleep': string[];
|
|
20
|
-
'session-end': string[];
|
|
21
|
-
'pre-compact': string[];
|
|
22
|
-
'post-compact': string[];
|
|
23
|
-
'capture-error': string[];
|
|
24
|
-
'compact-resume': string[];
|
|
25
|
-
'codex-run': string[];
|
|
26
|
-
dedup: string[];
|
|
27
|
-
dag: string[];
|
|
28
|
-
auth: string[];
|
|
29
|
-
goal: string[];
|
|
30
|
-
slack: string[];
|
|
31
|
-
github: string[];
|
|
32
|
-
audit: string[];
|
|
33
|
-
'correction-latency': string[];
|
|
34
|
-
provenance: string[];
|
|
35
|
-
status: string[];
|
|
36
|
-
outcome: string[];
|
|
37
|
-
conflicts: string[];
|
|
38
|
-
resolve: string[];
|
|
39
|
-
reject: string[];
|
|
40
|
-
rejections: string[];
|
|
41
|
-
unreject: string[];
|
|
42
|
-
dormant: string[];
|
|
43
|
-
projects: string[];
|
|
44
|
-
quarantine: string[];
|
|
45
|
-
tokens: string[];
|
|
46
|
-
failures: string[];
|
|
47
|
-
doctor: string[];
|
|
48
|
-
'support-bundle': string[];
|
|
49
|
-
snapshot: string[];
|
|
50
|
-
session: string[];
|
|
51
|
-
handoff: string[];
|
|
52
|
-
card: string[];
|
|
53
|
-
predict: string[];
|
|
54
|
-
current: string[];
|
|
55
|
-
forget: string[];
|
|
56
|
-
inspect: string[];
|
|
57
|
-
context: string[];
|
|
58
|
-
hook: string[];
|
|
59
|
-
setup: string[];
|
|
60
|
-
'daily-runner': string[];
|
|
61
|
-
embed: string[];
|
|
62
|
-
watch: string[];
|
|
63
|
-
learn: string[];
|
|
64
|
-
promote: string[];
|
|
65
|
-
sync: string[];
|
|
66
|
-
share: string[];
|
|
67
|
-
peers: string[];
|
|
68
|
-
import: string[];
|
|
69
|
-
export: string[];
|
|
70
|
-
capture: string[];
|
|
71
|
-
dashboard: string[];
|
|
72
|
-
wm: string[];
|
|
73
|
-
mcp: string[];
|
|
74
|
-
serve: string[];
|
|
75
|
-
invalidate: string[];
|
|
76
|
-
decide: string[];
|
|
77
|
-
incident: string[];
|
|
78
|
-
process: string[];
|
|
79
|
-
policy: string[];
|
|
80
|
-
skill: string[];
|
|
81
|
-
brief: string[];
|
|
82
|
-
note: string[];
|
|
83
|
-
graph: string[];
|
|
84
|
-
};
|
|
85
6
|
//# sourceMappingURL=usage.d.ts.map
|