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/print.js
CHANGED
|
@@ -15,7 +15,8 @@ export function recallEntryText(r, query, showWhy, isGlobal) {
|
|
|
15
15
|
const bars = Math.round(e.strength * 10);
|
|
16
16
|
const graphMark = r.graphVia ? ` [graph: ${r.graphVia.hops}hop ${r.graphVia.relType}]` : '';
|
|
17
17
|
const lines = [
|
|
18
|
-
`--- ${e.id} [${e.layer}] ${confLabel}${isGlobal ? ' [global]' : ''}${e.superseded_by ? ' [superseded]' : ''}${graphMark}
|
|
18
|
+
`--- ${e.id} [${e.layer}] ${confLabel}${isGlobal ? ' [global]' : ''}${e.superseded_by ? ' [superseded]' : ''}${graphMark} ` +
|
|
19
|
+
`score=${fmt(r.score, 3)} strength=${fmt(e.strength)}`,
|
|
19
20
|
` [${'█'.repeat(bars)}${'░'.repeat(10 - bars)}] tags: ${e.tags.join(', ') || 'none'} | retrieved: ${e.retrieval_count}x`,
|
|
20
21
|
];
|
|
21
22
|
if (showWhy) {
|
package/dist/cli/projects.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
// The `hippo projects` verb: list a store's project names, fold an old worktree name into its repo, repair old tags in one pass.
|
|
2
2
|
import * as path from 'path';
|
|
3
3
|
import { execFileSync } from 'child_process';
|
|
4
|
-
import
|
|
5
|
-
import {
|
|
4
|
+
import * as api from '../api/index.js';
|
|
5
|
+
import { cliApiContext } from './api-context.js';
|
|
6
6
|
import { flagIsTrue } from './flag-values.js';
|
|
7
7
|
import { resolveAuthRoot } from './shared.js';
|
|
8
8
|
import { printError } from './output.js';
|
|
@@ -11,7 +11,12 @@ import { DATE_PREFIX_CHARS } from '../util/token-text.js';
|
|
|
11
11
|
/** Old per-worktree project names of the repo at cwd, mapped to the repo's main checkout name; empty outside git. */
|
|
12
12
|
function worktreeNames() {
|
|
13
13
|
try {
|
|
14
|
-
const out = execFileSync('git', ['worktree', 'list', '--porcelain'], {
|
|
14
|
+
const out = execFileSync('git', ['worktree', 'list', '--porcelain'], {
|
|
15
|
+
encoding: 'utf8',
|
|
16
|
+
timeout: 10_000,
|
|
17
|
+
stdio: ['ignore', 'pipe', 'ignore'],
|
|
18
|
+
windowsHide: true,
|
|
19
|
+
});
|
|
15
20
|
const paths = out.split(/\r?\n/).filter((l) => l.startsWith('worktree ')).map((l) => path.basename(l.slice('worktree '.length)));
|
|
16
21
|
return new Map(paths.slice(1).map((name) => [name, paths[0]]));
|
|
17
22
|
}
|
|
@@ -32,8 +37,9 @@ function hint(p, worktrees) {
|
|
|
32
37
|
function count(n, one, many = `${one}s`) {
|
|
33
38
|
return `${n} ${n === 1 ? one : many}`;
|
|
34
39
|
}
|
|
35
|
-
function projectsList(
|
|
36
|
-
const
|
|
40
|
+
function projectsList(ctx, flags) {
|
|
41
|
+
const root = ctx.hippoRoot;
|
|
42
|
+
const projects = api.listProjectNames(ctx);
|
|
37
43
|
if (flags['json']) {
|
|
38
44
|
console.log(JSON.stringify({ store: root, projects }, null, 2));
|
|
39
45
|
return;
|
|
@@ -41,51 +47,56 @@ function projectsList(db, tenantId, root, flags) {
|
|
|
41
47
|
const worktrees = worktreeNames();
|
|
42
48
|
console.log(`${count(projects.length, 'project name')} in ${root} (newest write first):\n`);
|
|
43
49
|
for (const p of projects) {
|
|
44
|
-
console.log(`${label(p.origin)} ${count(p.live, 'memory', 'memories')}, ${p.imported} imported from agent notes,
|
|
50
|
+
console.log(`${label(p.origin)} ${count(p.live, 'memory', 'memories')}, ${p.imported} imported from agent notes, ` +
|
|
51
|
+
`newest ${p.newest.slice(0, DATE_PREFIX_CHARS)}${hint(p, worktrees)}`);
|
|
45
52
|
}
|
|
46
53
|
}
|
|
47
|
-
function projectsMerge(
|
|
54
|
+
function projectsMerge(ctx, args, flags) {
|
|
48
55
|
const apply = flagIsTrue(flags, 'apply');
|
|
49
56
|
const [from, into] = [args[1] ?? '', args[2] ?? ''];
|
|
50
|
-
const r =
|
|
57
|
+
const r = api.mergeProjectNames(ctx, { from, into, dryRun: !apply });
|
|
51
58
|
if (flags['json']) {
|
|
52
59
|
console.log(JSON.stringify(r, null, 2));
|
|
53
60
|
return;
|
|
54
61
|
}
|
|
55
62
|
console.log(`${apply ? 'Merged' : 'Dry run: would merge'} ${from} into ${into}:`);
|
|
56
|
-
console.log(` ${count(r.setAside.length, 'imported note
|
|
57
|
-
|
|
63
|
+
console.log(` ${count(r.setAside.length, 'imported note ' +
|
|
64
|
+
'copy', 'imported note copies')} set aside (${into} already holds the same note; the rest move under ${into} on the next sync)`);
|
|
65
|
+
console.log(` ${count(r.restamped.length, 'memory', 'memories')} re-tagged, plus ${r.dormantRestamped.length} dormant ` +
|
|
66
|
+
`and ${count(r.compactions, 'compaction record')}`);
|
|
58
67
|
console.log(apply ? `Backup: ${r.backup}\nEvery id is in the audit log: hippo audit list --op project_merge` : 'Nothing written. Add --apply to run it.');
|
|
59
68
|
}
|
|
60
|
-
function projectsRepair(
|
|
69
|
+
function projectsRepair(ctx, flags) {
|
|
70
|
+
const root = ctx.hippoRoot;
|
|
61
71
|
const apply = flagIsTrue(flags, 'apply');
|
|
62
|
-
const r =
|
|
72
|
+
const r = api.repairProjectNames(ctx, { dryRun: !apply });
|
|
63
73
|
if (flags['json']) {
|
|
64
74
|
console.log(JSON.stringify(r, null, 2));
|
|
65
75
|
return;
|
|
66
76
|
}
|
|
67
77
|
console.log(`${apply ? 'Repaired' : 'Dry run: would repair'} ${root}:`);
|
|
68
|
-
console.log(` ${count(r.copies.length, 'imported note
|
|
78
|
+
console.log(` ${count(r.copies.length, 'imported note ' +
|
|
79
|
+
'copy', 'imported note copies')} under the wrong project set aside (the note stays under its own, or user-global)`);
|
|
69
80
|
for (const f of r.folds)
|
|
70
81
|
console.log(` ${f.from} folded into ${f.into} (its sessions' folders resolve there now)`);
|
|
71
|
-
for (const c of r.collisions)
|
|
82
|
+
for (const c of r.collisions) {
|
|
72
83
|
console.log(` ${c.name} left as it is: its folders now resolve to ${c.ids.join(', ')}; fold it by hand with hippo projects merge`);
|
|
84
|
+
}
|
|
73
85
|
console.log(` sleep's user-global merged rows: ${r.toProject.length} re-tagged to their parents' project`);
|
|
74
86
|
console.log(` ${r.setAside.length} set aside (parents in two projects; sleep re-merges them per project)`);
|
|
75
87
|
console.log(` ${r.untraced.length} left as they are (no parent left to show which project; check them with hippo inspect <id>)`);
|
|
76
88
|
console.log(apply ? `Backup: ${r.backup}\nEvery id is in the audit log: hippo audit list --op project_repair` : 'Nothing written. Add --apply to run it.');
|
|
77
89
|
}
|
|
78
90
|
export function handleProjects({ hippoRoot, tenantId, args, flags }) {
|
|
79
|
-
const
|
|
91
|
+
const ctx = cliApiContext(resolveAuthRoot(hippoRoot, flags), tenantId);
|
|
80
92
|
const sub = args[0] ?? 'list';
|
|
81
|
-
const db = openHippoDb(root);
|
|
82
93
|
try {
|
|
83
94
|
if (sub === 'list')
|
|
84
|
-
return projectsList(
|
|
95
|
+
return projectsList(ctx, flags);
|
|
85
96
|
if (sub === 'merge')
|
|
86
|
-
return projectsMerge(
|
|
97
|
+
return projectsMerge(ctx, args, flags);
|
|
87
98
|
if (sub === 'repair')
|
|
88
|
-
return projectsRepair(
|
|
99
|
+
return projectsRepair(ctx, flags);
|
|
89
100
|
printError('Usage: hippo projects [list] [--json] | merge <from> <into> [--apply] | repair [--apply] [--global]');
|
|
90
101
|
process.exitCode = 1;
|
|
91
102
|
}
|
|
@@ -93,8 +104,5 @@ export function handleProjects({ hippoRoot, tenantId, args, flags }) {
|
|
|
93
104
|
printError(errorMessage(err));
|
|
94
105
|
process.exitCode = 1;
|
|
95
106
|
}
|
|
96
|
-
finally {
|
|
97
|
-
closeHippoDb(db);
|
|
98
|
-
}
|
|
99
107
|
}
|
|
100
108
|
//# sourceMappingURL=projects.js.map
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
/** Fault-isolated like the project tag repair: a failure warns, leaves the store unmarked and runs again next time. */
|
|
2
|
-
export declare function repairQualityOnceAt(root: string): void;
|
|
2
|
+
export declare function repairQualityOnceAt(root: string, tenantId: string): void;
|
|
3
3
|
//# sourceMappingURL=quality-repair-once.d.ts.map
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
// Sleep and the daily runner clean a store's old automatic memories once, so an upgrade needs no command.
|
|
2
2
|
import * as path from 'path';
|
|
3
3
|
import { errorMessage, log } from '../util/log.js';
|
|
4
|
-
import { repairQualityOnce } from '../store/quality-repair.js';
|
|
5
4
|
import { getGlobalRoot } from '../sharing/global-store.js';
|
|
6
|
-
import {
|
|
5
|
+
import { repairMemoryQualityOnce } from '../api/audit.js';
|
|
6
|
+
import { cliApiContext } from './api-context.js';
|
|
7
7
|
/** Fault-isolated like the project tag repair: a failure warns, leaves the store unmarked and runs again next time. */
|
|
8
|
-
export function repairQualityOnceAt(root) {
|
|
8
|
+
export function repairQualityOnceAt(root, tenantId) {
|
|
9
9
|
try {
|
|
10
|
-
const result =
|
|
10
|
+
const result = repairMemoryQualityOnce(cliApiContext(root, tenantId));
|
|
11
11
|
if (result === null)
|
|
12
12
|
return;
|
|
13
13
|
if (!result.supported) {
|
|
@@ -18,7 +18,8 @@ export function repairQualityOnceAt(root) {
|
|
|
18
18
|
const scope = path.resolve(root) === path.resolve(getGlobalRoot()) ? ' --global' : '';
|
|
19
19
|
const moved = result.appliedIds.length;
|
|
20
20
|
if (moved > 0) {
|
|
21
|
-
console.log(`Set aside ${moved} automatic ${moved === 1 ? 'memory' : 'memories'} with a certain defect,
|
|
21
|
+
console.log(`Set aside ${moved} automatic ${moved === 1 ? 'memory' : 'memories'} with a certain defect, ` +
|
|
22
|
+
`once after the upgrade (backup: ${result.backup}).`);
|
|
22
23
|
console.log(` List them: hippo dormant${scope} Bring one back: hippo dormant restore <id>${scope}`);
|
|
23
24
|
}
|
|
24
25
|
const review = result.issues.filter((issue) => issue.disposition === 'review').length;
|
package/dist/cli/recall.js
CHANGED
|
@@ -13,7 +13,7 @@ import { cliRecallOrigin, cliRecallReranker, cliRecallSetting, DEFAULT_MAX_NEIGH
|
|
|
13
13
|
import { cliApiContext } from './api-context.js';
|
|
14
14
|
import { handoffText, printedTokens, sessionTrailText, settleTokens, snapshotText } from '../api/context-render.js';
|
|
15
15
|
import { printError } from './output.js';
|
|
16
|
-
import { parseLimitFlag, parseBudgetFlag, parseAsOfFlag, engineFlags, boolFlag, flagIsTrue, isBooleanFlag, } from './flag-values.js';
|
|
16
|
+
import { parseLimitFlag, parseBudgetFlag, parseAsOfFlag, engineFlags, boolFlag, flagIsTrue, isBooleanFlag, numberFlag, } from './flag-values.js';
|
|
17
17
|
import { requireInit } from './shared.js';
|
|
18
18
|
import { recallEntryText, recallHeading, printActiveTaskSnapshot, printSessionEvents, printHandoff, captureConsole } from './print.js';
|
|
19
19
|
import { hostSessionId, hookStoreRoot } from './hook-runtime.js';
|
|
@@ -22,8 +22,10 @@ import { CliExit } from './exit.js';
|
|
|
22
22
|
function planningLine(p) {
|
|
23
23
|
if (p.hint)
|
|
24
24
|
return `Planning fallacy hint (class: ${p.hint.classTag}): ${p.hint.baserateSummary} [detected: ${JSON.stringify(p.hint.detectedPhrase)}]`;
|
|
25
|
-
if (p.watching)
|
|
26
|
-
return `Planning fallacy: watching this query (reason: ${p.watching.reason}). ${p.watching.suggestion}
|
|
25
|
+
if (p.watching) {
|
|
26
|
+
return `Planning fallacy: watching this query (reason: ${p.watching.reason}). ${p.watching.suggestion} ` +
|
|
27
|
+
`[detected: ${JSON.stringify(p.watching.detectedPhrase)}]`;
|
|
28
|
+
}
|
|
27
29
|
return null;
|
|
28
30
|
}
|
|
29
31
|
function cutoffLine(shown, s) {
|
|
@@ -198,9 +200,7 @@ function parseRecallOptions(ctx, flags) {
|
|
|
198
200
|
const explicitScope = flags['scope'] !== undefined ? String(flags['scope']).trim() : null;
|
|
199
201
|
const setting = cliRecallSetting(ctx, explicitScope);
|
|
200
202
|
const config = loadConfig(ctx.hippoRoot);
|
|
201
|
-
const minResults = flags
|
|
202
|
-
? parseInt(String(flags['min-results']), 10)
|
|
203
|
-
: undefined;
|
|
203
|
+
const minResults = numberFlag(flags, 'min-results');
|
|
204
204
|
const graphStream = flagIsTrue(flags, 'graph-stream') ? parseGraphStreamFlags(flags) : undefined;
|
|
205
205
|
const late = parseRecallLateFlags(flags);
|
|
206
206
|
const goalTag = flags['goal'] !== undefined ? String(flags['goal']).trim() : '';
|
|
@@ -228,7 +228,13 @@ function rankOptions(query, flags, o, priced) {
|
|
|
228
228
|
return {
|
|
229
229
|
budget: entryBudget, cost: priced.printCost, limit: o.limit, why: o.showWhy, includeSuperseded: o.includeSuperseded, asOf: o.asOf,
|
|
230
230
|
explicitScope: o.explicitScope, activeScope: o.setting.activeScope,
|
|
231
|
-
search: {
|
|
231
|
+
search: {
|
|
232
|
+
...engineFlags(flags, o.config),
|
|
233
|
+
multihop: flagIsTrue(flags, 'multihop') || o.config.multihop.enabled,
|
|
234
|
+
graphStream: o.graphStream,
|
|
235
|
+
minResults: o.minResults,
|
|
236
|
+
explain: false,
|
|
237
|
+
},
|
|
232
238
|
graphHops: o.late.graphHops,
|
|
233
239
|
evcAdaptive: boolFlag(flags, 'evc-adaptive'),
|
|
234
240
|
filterConflicts: boolFlag(flags, 'filter-conflicts'),
|
package/dist/cli/refine-llm.js
CHANGED
|
@@ -2,8 +2,9 @@
|
|
|
2
2
|
* Uses fetch directly (no SDK dependency); on any failure the original memory is untouched. */
|
|
3
3
|
import { Layer } from '../core/memory.js';
|
|
4
4
|
import { REFINED_TAG, storeRefinement } from '../api/index.js';
|
|
5
|
+
import { listMemories, listMemoriesByIds } from '../api/memories.js';
|
|
5
6
|
import { cliApiContext } from './api-context.js';
|
|
6
|
-
import {
|
|
7
|
+
import { chunked } from '../util/chunked.js';
|
|
7
8
|
import { redactSecretsStrict } from '../util/secret-detect.js';
|
|
8
9
|
import { sendAnthropicMessage } from '../util/anthropic-messages.js';
|
|
9
10
|
import { log } from '../util/log.js';
|
|
@@ -22,7 +23,9 @@ export async function refineSemanticMemory(merged, sources, opts) {
|
|
|
22
23
|
.slice(0, MAX_REFINE_SOURCES)
|
|
23
24
|
.map((s, i) => `[source ${i + 1}] ${redactSecretsStrict(s.content).slice(0, REFINE_SOURCE_CHARS)}`)
|
|
24
25
|
.join('\n\n');
|
|
25
|
-
const prompt = `You are refining a semantic memory in an agent's memory store.
|
|
26
|
+
const prompt = `You are refining a semantic memory in an agent's memory store. ` +
|
|
27
|
+
`The rule-based consolidator merged several related episodic memories into one, but the output is clumsy. ` +
|
|
28
|
+
`Produce a single coherent semantic memory that captures the underlying principle.
|
|
26
29
|
|
|
27
30
|
Rules:
|
|
28
31
|
- Output ONLY the refined content — no preamble, no quote marks, no "Here is...".
|
|
@@ -56,7 +59,7 @@ ${sourceBlock}`;
|
|
|
56
59
|
function describeRefineFailure(failure) {
|
|
57
60
|
switch (failure.kind) {
|
|
58
61
|
case 'request': return `refine: request failed: ${failure.message}`;
|
|
59
|
-
case 'http': return `refine: API answered HTTP ${failure.status}`;
|
|
62
|
+
case 'http': return `refine: API answered HTTP ${failure.status}${failure.detail ? `: ${failure.detail}` : ''}`;
|
|
60
63
|
case 'unreadable': return `refine: unreadable response: ${failure.message}`;
|
|
61
64
|
}
|
|
62
65
|
}
|
|
@@ -74,9 +77,10 @@ export async function refineStore(hippoRoot, opts) {
|
|
|
74
77
|
failed: 0,
|
|
75
78
|
details: [],
|
|
76
79
|
};
|
|
77
|
-
//
|
|
78
|
-
|
|
79
|
-
const
|
|
80
|
+
// No tenant means every tenant, so the ctx's own tenant is never read.
|
|
81
|
+
const ctx = cliApiContext(hippoRoot, opts.tenantId ?? '');
|
|
82
|
+
const reach = { everyTenant: opts.tenantId === undefined };
|
|
83
|
+
const entries = listMemories(ctx, reach);
|
|
80
84
|
let processed = 0;
|
|
81
85
|
for (const entry of entries) {
|
|
82
86
|
if (!isConsolidated(entry))
|
|
@@ -90,22 +94,18 @@ export async function refineStore(hippoRoot, opts) {
|
|
|
90
94
|
if (opts.limit !== undefined && processed >= opts.limit)
|
|
91
95
|
break;
|
|
92
96
|
processed++;
|
|
93
|
-
await refineOneEntry(
|
|
97
|
+
await refineOneEntry(ctx, reach, entry, opts, result);
|
|
94
98
|
}
|
|
95
99
|
return result;
|
|
96
100
|
}
|
|
97
|
-
async function refineOneEntry(
|
|
101
|
+
async function refineOneEntry(ctx, reach, entry, opts, result) {
|
|
98
102
|
// Best-effort: walk parents_json (schema v9) to fetch originals. When
|
|
99
103
|
// parents aren't recorded we still refine using just the merged content.
|
|
100
|
-
const sources = [];
|
|
101
104
|
const parentIds = Array.isArray(entry.parents) ? entry.parents : [];
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
if (p)
|
|
107
|
-
sources.push(p);
|
|
108
|
-
}
|
|
105
|
+
// Parent lookup is tenant-scoped; cross-tenant parents are absent and skipped,
|
|
106
|
+
// so refine still works from the merged content alone.
|
|
107
|
+
const found = new Map(chunked(parentIds).flatMap((chunk) => listMemoriesByIds(ctx, chunk, reach)).map((p) => [p.id, p]));
|
|
108
|
+
const sources = parentIds.flatMap((pid) => found.get(pid) ?? []);
|
|
109
109
|
const refined = await refineSemanticMemory(entry.content, sources, {
|
|
110
110
|
apiKey: opts.apiKey,
|
|
111
111
|
model: opts.model,
|
|
@@ -121,7 +121,7 @@ async function refineOneEntry(hippoRoot, entry, opts, result) {
|
|
|
121
121
|
result.details.push({ id: entry.id, status: 'refined', reason: 'dry-run (no write)' });
|
|
122
122
|
return;
|
|
123
123
|
}
|
|
124
|
-
storeRefinement(cliApiContext(hippoRoot, entry.tenantId), entry, refined);
|
|
124
|
+
storeRefinement(cliApiContext(ctx.hippoRoot, entry.tenantId), entry, refined);
|
|
125
125
|
result.refined++;
|
|
126
126
|
result.details.push({ id: entry.id, status: 'refined' });
|
|
127
127
|
}
|
package/dist/cli/remember.js
CHANGED
|
@@ -1,18 +1,17 @@
|
|
|
1
1
|
// The write verbs: `hippo remember`, `hippo supersede` and `hippo trace`.
|
|
2
2
|
import { envAnthropicApiKey } from '../util/env.js';
|
|
3
|
-
import { evalNow } from '../core/ablation.js';
|
|
3
|
+
import { evalNow, strengthAblation } from '../core/ablation.js';
|
|
4
4
|
import * as fs from 'fs';
|
|
5
5
|
import { calculateStrength, calculateRewardFactor, confidenceFacets, confidenceLabel, Layer, } from '../core/memory.js';
|
|
6
6
|
import * as api from '../api/index.js';
|
|
7
7
|
import { getMemory } from '../api/memories.js';
|
|
8
8
|
import { ConflictError, NotFoundError } from '../core/api-errors.js';
|
|
9
|
-
import { isInitialized } from '../
|
|
10
|
-
import {
|
|
11
|
-
import { RejectedValueError } from '../store/rejection.js';
|
|
9
|
+
import { isInitialized } from '../core/project-identity.js';
|
|
10
|
+
import { RejectedValueError } from '../core/api-errors.js';
|
|
12
11
|
import { renderTraceContent, parseSteps } from '../consolidate/trace.js';
|
|
13
12
|
import { extractPathTags } from '../search/path-context.js';
|
|
14
|
-
import { detectScope } from '../
|
|
15
|
-
import { assertClientScope } from '../
|
|
13
|
+
import { detectScope } from '../core/active-scope.js';
|
|
14
|
+
import { assertClientScope } from '../core/recall-scope.js';
|
|
16
15
|
import { getGlobalRoot, initGlobal } from '../sharing/global-store.js';
|
|
17
16
|
import { vetSecrets } from '../util/secret-detect.js';
|
|
18
17
|
import * as client from './client.js';
|
|
@@ -268,9 +267,9 @@ async function cmdTrace(hippoRoot, tenantId, id, flags) {
|
|
|
268
267
|
}
|
|
269
268
|
function traceStats(entry) {
|
|
270
269
|
const now = evalNow();
|
|
271
|
-
const strength = calculateStrength(entry, now);
|
|
270
|
+
const strength = calculateStrength(entry, now, { ablation: strengthAblation() });
|
|
272
271
|
const halfLife = entry.half_life_days;
|
|
273
|
-
const rewardFactor = calculateRewardFactor(entry);
|
|
272
|
+
const rewardFactor = calculateRewardFactor(entry, strengthAblation());
|
|
274
273
|
const effHalfLife = halfLife * rewardFactor;
|
|
275
274
|
const createdMs = new Date(entry.created).getTime();
|
|
276
275
|
const ageDays = (now.getTime() - createdMs) / DAY_MS;
|
|
@@ -279,7 +278,7 @@ function traceStats(entry) {
|
|
|
279
278
|
const facets = confidenceFacets(entry, now);
|
|
280
279
|
const conf = confidenceLabel(entry, now).text;
|
|
281
280
|
// Projected strength: same decay curve, just push `now` out.
|
|
282
|
-
const projectedAt = (days) => calculateStrength(entry, new Date(now.getTime() + days * DAY_MS));
|
|
281
|
+
const projectedAt = (days) => calculateStrength(entry, new Date(now.getTime() + days * DAY_MS), { ablation: strengthAblation() });
|
|
283
282
|
return { strength, halfLife, rewardFactor, effHalfLife, ageDays, sinceLast, facets, conf, projectedAt };
|
|
284
283
|
}
|
|
285
284
|
async function traceLineage(hippoRoot, globalRoot, entry, id, tenantId) {
|
|
@@ -293,8 +292,8 @@ async function traceLineage(hippoRoot, globalRoot, entry, id, tenantId) {
|
|
|
293
292
|
}
|
|
294
293
|
// Open conflicts involving this memory.
|
|
295
294
|
const allConflicts = [
|
|
296
|
-
...
|
|
297
|
-
...(isInitialized(globalRoot) ?
|
|
295
|
+
...api.listConflicts(cliApiContext(hippoRoot, tenantId), 'open'),
|
|
296
|
+
...(isInitialized(globalRoot) ? api.listConflicts(cliApiContext(globalRoot, tenantId), 'open') : []),
|
|
298
297
|
];
|
|
299
298
|
const myConflicts = allConflicts.filter((c) => c.memory_a_id === id || c.memory_b_id === id);
|
|
300
299
|
return { parentPreviews, myConflicts };
|
|
@@ -334,7 +333,8 @@ function printTraceText(t) {
|
|
|
334
333
|
console.log(`Memory: ${entry.id} [${sourceLabel}]`);
|
|
335
334
|
console.log('='.repeat(50));
|
|
336
335
|
console.log(`Content: ${entry.content.replace(/\s+/g, ' ').slice(0, DETAIL_CONTENT_CHARS)}${entry.content.length > DETAIL_CONTENT_CHARS ? '...' : ''}`);
|
|
337
|
-
console.log(`Layer: ${entry.layer.padEnd(10)} Confidence: ${conf.padEnd(14)} Pinned: ${entry.pinned ? 'yes' : 'no'}${entry.starred ? ' Starred:
|
|
336
|
+
console.log(`Layer: ${entry.layer.padEnd(10)} Confidence: ${conf.padEnd(14)} Pinned: ${entry.pinned ? 'yes' : 'no'}${entry.starred ? ' Starred: ' +
|
|
337
|
+
'yes' : ''}`);
|
|
338
338
|
console.log(`Tags: ${entry.tags.join(', ') || '(none)'}`);
|
|
339
339
|
console.log(`Created: ${entry.created} (${fmt(ageDays, 1)} days ago)`);
|
|
340
340
|
console.log();
|
package/dist/cli/scheduler.js
CHANGED
|
@@ -51,7 +51,8 @@ function setAsideCorruptRegistry(registryPath, err) {
|
|
|
51
51
|
log.warn(`workspace registry ${registryPath} is corrupt (${reason}); moved it to ${aside} and starting with no workspaces`);
|
|
52
52
|
}
|
|
53
53
|
catch (renameErr) {
|
|
54
|
-
log.warn(`workspace registry ${registryPath} is corrupt (${reason}) and could not be moved aside (${errorMessage(renameErr)});
|
|
54
|
+
log.warn(`workspace registry ${registryPath} is corrupt (${reason}) and could not be moved aside (${errorMessage(renameErr)}); ` +
|
|
55
|
+
`starting with no workspaces`);
|
|
55
56
|
}
|
|
56
57
|
}
|
|
57
58
|
export function saveWorkspaceRegistry(globalRoot, registry) {
|
package/dist/cli/serve.js
CHANGED
|
@@ -4,14 +4,14 @@ import { envAllowKeylessLocal, envPort, envRequireAuth, envTlsCert, envTlsKey }
|
|
|
4
4
|
import * as fs from 'fs';
|
|
5
5
|
import * as path from 'path';
|
|
6
6
|
import { printError } from './output.js';
|
|
7
|
-
import { stringFlagOrExit, stringFlag } from './flag-values.js';
|
|
7
|
+
import { stringFlagOrExit, stringFlag, numberFlag } from './flag-values.js';
|
|
8
8
|
import { requireInit } from './shared.js';
|
|
9
9
|
import { errorMessage } from '../util/log.js';
|
|
10
10
|
import { CliExit } from './exit.js';
|
|
11
|
-
import { DEFAULT_SERVER_HOST, DEFAULT_SERVER_PORT } from '../server/defaults.js';
|
|
11
|
+
import { DEFAULT_DASHBOARD_PORT, DEFAULT_SERVER_HOST, DEFAULT_SERVER_PORT } from '../server/defaults.js';
|
|
12
12
|
export async function handleDashboard({ hippoRoot, flags }) {
|
|
13
13
|
requireInit(hippoRoot);
|
|
14
|
-
const port =
|
|
14
|
+
const port = numberFlag(flags, 'port') ?? DEFAULT_DASHBOARD_PORT;
|
|
15
15
|
const { serveDashboard } = await import('../dashboard/dashboard.js');
|
|
16
16
|
serveDashboard(hippoRoot, port, undefined, { handleSignals: true });
|
|
17
17
|
// A later throw ends in one log line and exit 1, as it does for serve and mcp; a busy port is reported by the dashboard itself.
|
|
@@ -10,7 +10,7 @@ export declare function cmdShimArgs(shimPath: string, forwardArgs: readonly stri
|
|
|
10
10
|
export declare function handleCodexRun({ hippoRoot, tenantId, args }: CommandContext): void;
|
|
11
11
|
export declare function cmdCodexSessionEndWorker(hippoRoot: string, tenantId: string, flags: CliFlags): Promise<void>;
|
|
12
12
|
export declare function handleCodexSessionEndWorker({ hippoRoot, tenantId, flags }: CommandContext): Promise<void>;
|
|
13
|
-
export declare function handlePreCompact({ hippoRoot, flags }: CommandContext): Promise<void>;
|
|
13
|
+
export declare function handlePreCompact({ hippoRoot, tenantId, flags }: CommandContext): Promise<void>;
|
|
14
14
|
export declare function handlePostCompact({ hippoRoot, flags }: CommandContext): Promise<void>;
|
|
15
15
|
export declare function handleCaptureError({ hippoRoot, tenantId, flags }: CommandContext): Promise<void>;
|
|
16
16
|
export declare function handleCompactResume({ hippoRoot, tenantId }: CommandContext): Promise<void>;
|