hippo-memory 1.71.0 → 2.0.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 +7 -5
- package/dist/agent-memories/apply.d.ts +0 -11
- package/dist/agent-memories/apply.js +11 -26
- 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 +3 -2
- package/dist/api/audit.d.ts +30 -2
- package/dist/api/audit.js +48 -7
- package/dist/api/auth.d.ts +11 -9
- package/dist/api/auth.js +39 -40
- 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-auto.js +4 -2
- package/dist/api/context-render.js +4 -3
- package/dist/api/context-select.js +15 -29
- package/dist/api/context.js +29 -18
- 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 +3 -2
- 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 +7 -3
- package/dist/api/forget.js +24 -14
- package/dist/api/goals.d.ts +1 -1
- package/dist/api/goals.js +5 -9
- package/dist/api/graph.js +2 -1
- 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 +5 -1
- package/dist/api/learn.js +71 -44
- package/dist/api/ledger-db.d.ts +2 -6
- package/dist/api/ledger-db.js +4 -36
- package/dist/api/memories.d.ts +21 -1
- package/dist/api/memories.js +51 -1
- package/dist/api/objects.d.ts +1 -1
- package/dist/api/objects.js +2 -1
- package/dist/api/outcome.d.ts +5 -5
- package/dist/api/outcome.js +17 -16
- 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 +8 -1
- package/dist/api/projects.d.ts +21 -0
- package/dist/api/projects.js +24 -0
- package/dist/api/promote.d.ts +3 -3
- package/dist/api/promote.js +26 -28
- package/dist/api/prompt-hook.d.ts +17 -2
- package/dist/api/prompt-hook.js +45 -4
- package/dist/api/quarantine.js +2 -1
- package/dist/api/recall-cli.d.ts +3 -0
- package/dist/api/recall-cli.js +13 -4
- package/dist/api/recall-core.js +10 -5
- package/dist/api/recall-pipeline.js +23 -24
- package/dist/api/recall-request.js +1 -1
- package/dist/api/recall-types.d.ts +3 -1
- package/dist/api/recall.d.ts +0 -3
- package/dist/api/recall.js +51 -73
- package/dist/api/remember-local.d.ts +5 -2
- package/dist/api/remember-local.js +15 -7
- package/dist/api/remember.d.ts +7 -3
- package/dist/api/remember.js +19 -16
- package/dist/api/session-end.d.ts +46 -0
- package/dist/api/session-end.js +131 -0
- package/dist/api/sleep-run.d.ts +1 -1
- package/dist/api/sleep-run.js +16 -11
- package/dist/api/sleep.js +4 -3
- 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 +2 -2
- package/dist/api/types.d.ts +3 -7
- 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 +7 -7
- package/dist/capture/compaction-spool.js +60 -51
- 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 +3 -2
- package/dist/capture/session-worker.js +22 -10
- 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 +20 -20
- package/dist/cli/auth.d.ts +1 -1
- package/dist/cli/auth.js +16 -17
- 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 +6 -2
- package/dist/cli/client.js +37 -21
- package/dist/cli/compact-resume-payload.js +1 -1
- package/dist/cli/context.d.ts +1 -1
- package/dist/cli/context.js +13 -13
- package/dist/cli/continuity.d.ts +1 -1
- package/dist/cli/continuity.js +36 -39
- package/dist/cli/curate.d.ts +2 -2
- package/dist/cli/curate.js +32 -36
- 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 +7 -285
- 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 +6 -6
- package/dist/cli/hook-runtime.js +9 -36
- 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/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/object-verbs.d.ts +2 -2
- package/dist/cli/object-verbs.js +4 -4
- 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 +174 -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 +18 -17
- package/dist/cli/remember.js +17 -17
- package/dist/cli/scheduler.js +2 -1
- package/dist/cli/serve.js +11 -6
- package/dist/cli/session-hooks.d.ts +1 -5
- package/dist/cli/session-hooks.js +89 -168
- 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 +3 -3
- package/dist/cli/transfer.js +64 -43
- package/dist/cli/usage.d.ts +1 -80
- package/dist/cli/usage.js +2 -696
- package/dist/cli/verb-row.d.ts +34 -0
- package/dist/cli/verb-row.js +6 -0
- package/dist/cli/verbs/health.d.ts +27 -0
- package/dist/cli/verbs/health.js +234 -0
- package/dist/cli/verbs/memory.d.ts +16 -0
- package/dist/cli/verbs/memory.js +236 -0
- package/dist/cli/verbs/objects.d.ts +20 -0
- package/dist/cli/verbs/objects.js +257 -0
- package/dist/cli/verbs/sessions.d.ts +31 -0
- package/dist/cli/verbs/sessions.js +314 -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 +24 -315
- package/dist/connectors/dlq.d.ts +39 -3
- package/dist/connectors/dlq.js +39 -4
- package/dist/connectors/github/backfill.js +12 -3
- package/dist/connectors/github/deletion.js +2 -1
- package/dist/connectors/github/dlq.js +31 -73
- package/dist/connectors/github/ingest.d.ts +2 -6
- package/dist/connectors/github/ingest.js +5 -29
- package/dist/connectors/github/tenant-routing.js +2 -1
- package/dist/connectors/github/webhook.d.ts +2 -1
- package/dist/connectors/github/webhook.js +35 -2
- package/dist/connectors/ingest.d.ts +10 -0
- package/dist/connectors/ingest.js +29 -0
- package/dist/connectors/slack/deletion.js +2 -1
- package/dist/connectors/slack/dlq.js +49 -71
- package/dist/connectors/slack/ingest.d.ts +2 -6
- package/dist/connectors/slack/ingest.js +4 -28
- package/dist/connectors/slack/tenant-routing.js +2 -1
- package/dist/connectors/slack/webhook.d.ts +2 -1
- package/dist/connectors/slack/webhook.js +2 -1
- package/dist/consolidate/conflicts.js +2 -2
- package/dist/consolidate/dag.js +29 -18
- package/dist/consolidate/dedupe.d.ts +7 -0
- package/dist/consolidate/dedupe.js +6 -4
- package/dist/consolidate/llm-passes.js +45 -19
- package/dist/consolidate/memory-value.js +3 -2
- package/dist/consolidate/merge.js +8 -8
- 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 +9 -6
- package/dist/consolidate/traces.js +5 -5
- 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 +22 -18
- 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 +4 -4
- package/dist/core/memory-audit.d.ts +17 -0
- package/dist/core/memory-audit.js +54 -0
- package/dist/core/memory.d.ts +14 -8
- package/dist/core/memory.js +35 -23
- package/dist/{consolidate → core}/merged-row.d.ts +1 -1
- package/dist/{consolidate → core}/merged-row.js +1 -1
- package/dist/core/physics.d.ts +3 -1
- package/dist/core/physics.js +23 -18
- 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 +12 -2
- package/dist/{store → core}/recall-scope.d.ts +1 -10
- package/dist/{store → core}/recall-scope.js +2 -19
- package/dist/core/search-types.d.ts +1 -1
- package/dist/dashboard/dashboard-actions.d.ts +2 -2
- package/dist/dashboard/dashboard-actions.js +5 -5
- package/dist/dashboard/dashboard-queries.js +2 -7
- package/dist/dashboard/dashboard-snapshot.js +1 -3
- package/dist/dashboard/dashboard.js +16 -5
- package/dist/db/busy.d.ts +2 -7
- package/dist/db/busy.js +21 -26
- package/dist/db/connect.d.ts +2 -2
- package/dist/db/connect.js +7 -7
- package/dist/db/index.d.ts +3 -3
- package/dist/db/index.js +3 -3
- package/dist/db/migrate.js +14 -7
- package/dist/db/migrations/index.d.ts +1 -1
- package/dist/db/migrations/index.js +3 -1
- package/dist/db/migrations/v11.js +1 -0
- package/dist/db/migrations/v14.js +1 -0
- 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.d.ts +0 -4
- package/dist/db/physics-state.js +7 -33
- package/dist/db/request-stores.d.ts +1 -0
- package/dist/db/request-stores.js +2 -1
- package/dist/db/tables.d.ts +2 -0
- package/dist/db/tables.js +6 -2
- package/dist/db/vector-store.js +19 -5
- package/dist/db/wal-checkpointer.js +2 -1
- package/dist/doctor.d.ts +3 -0
- package/dist/doctor.js +18 -15
- 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 +19 -25
- 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/entry/store-kit.d.ts +37 -0
- package/dist/entry/store-kit.js +25 -0
- package/dist/entry/testing.d.ts +6 -0
- package/dist/entry/testing.js +7 -0
- package/dist/eval/eval-suite.js +17 -11
- package/dist/eval/eval.js +1 -1
- package/dist/eval/judgment.js +12 -5
- 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 +10 -4
- 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 +4 -4
- package/dist/importers/sources.js +5 -4
- package/dist/importers/vault.d.ts +1 -1
- package/dist/importers/vault.js +25 -23
- package/dist/index.d.ts +5 -4
- package/dist/index.js +4 -3
- package/dist/learn/autolearn.d.ts +15 -3
- package/dist/learn/autolearn.js +38 -16
- package/dist/learn/churn-git.js +13 -4
- package/dist/learn/extract.d.ts +3 -2
- package/dist/learn/extract.js +7 -5
- package/dist/learn/forward-claim-detector.js +4 -2
- package/dist/learn/invalidation.d.ts +2 -1
- package/dist/learn/invalidation.js +18 -9
- 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.d.ts +1 -1
- package/dist/mcp/memory-tools.js +8 -9
- 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 +22 -20
- package/dist/mcp/stdio.js +37 -16
- 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 +71 -98
- 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 +12 -0
- package/dist/search/embed-memories.js +389 -0
- package/dist/search/engine.d.ts +8 -0
- package/dist/search/engine.js +10 -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 +14 -17
- package/dist/server/auth.d.ts +3 -1
- package/dist/server/auth.js +24 -15
- package/dist/server/boot.d.ts +2 -1
- package/dist/server/boot.js +34 -84
- package/dist/server/client-ip.d.ts +9 -6
- package/dist/server/client-ip.js +36 -17
- 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 -133
- 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 +19 -40
- 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/tls.d.ts +7 -2
- package/dist/server/tls.js +17 -5
- package/dist/server/types.d.ts +29 -12
- package/dist/server/validation.d.ts +1 -2
- package/dist/server/validation.js +6 -11
- package/dist/server.d.ts +4 -40
- package/dist/server.js +3 -29
- package/dist/sharing/global-store.d.ts +4 -5
- package/dist/sharing/global-store.js +8 -13
- 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 +10 -3
- package/dist/sharing/share.d.ts +2 -0
- package/dist/sharing/share.js +39 -38
- package/dist/store/ambient.js +7 -7
- 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 +59 -30
- package/dist/store/capture-write.d.ts +17 -0
- package/dist/store/capture-write.js +35 -0
- package/dist/store/cards.js +6 -5
- 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 +418 -0
- package/dist/store/compactions.js +6 -4
- package/dist/store/conflicts.d.ts +7 -1
- package/dist/store/conflicts.js +13 -9
- package/dist/store/connectors/dlq.d.ts +10 -0
- package/dist/store/connectors/dlq.js +33 -0
- package/dist/store/connectors/event-log.d.ts +13 -0
- package/dist/store/connectors/event-log.js +24 -0
- package/dist/store/connectors/github.d.ts +7 -9
- package/dist/store/connectors/github.js +35 -60
- package/dist/store/connectors/slack.d.ts +2 -11
- package/dist/store/connectors/slack.js +24 -57
- package/dist/store/dashboard-reads.js +8 -6
- package/dist/store/delete-and-batch.d.ts +6 -0
- package/dist/store/delete-and-batch.js +40 -6
- package/dist/store/delivery-recorder.d.ts +12 -5
- package/dist/store/delivery-recorder.js +13 -11
- package/dist/store/descendant-page.js +8 -4
- package/dist/store/dormant.d.ts +1 -1
- package/dist/store/dormant.js +10 -4
- package/dist/store/embeddings/index.d.ts +2 -12
- package/dist/store/embeddings/index.js +5 -374
- package/dist/store/entry-reads.d.ts +35 -4
- package/dist/store/entry-reads.js +86 -19
- package/dist/store/entry-row.js +9 -2
- package/dist/store/entry-writes.d.ts +15 -12
- package/dist/store/entry-writes.js +54 -22
- 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 +22 -19
- package/dist/store/graph-reads.js +9 -6
- package/dist/store/graph-view-rows.js +2 -1
- package/dist/store/graph-writes.d.ts +6 -6
- package/dist/store/graph-writes.js +48 -71
- package/dist/store/half-life.js +2 -2
- package/dist/store/handoffs.d.ts +10 -4
- package/dist/store/handoffs.js +10 -9
- package/dist/store/index-and-stats.js +2 -2
- package/dist/store/index.d.ts +2 -2
- package/dist/store/index.js +1 -1
- 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 +19 -10
- package/dist/store/open.d.ts +2 -5
- package/dist/store/open.js +42 -54
- package/dist/store/pilot-arm.d.ts +12 -0
- package/dist/store/pilot-arm.js +42 -0
- package/dist/store/port.d.ts +68 -6
- 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/quality-repair.js +1 -1
- package/dist/store/quarantine.js +2 -1
- package/dist/store/recall-trace.d.ts +2 -0
- package/dist/store/recall-trace.js +20 -3
- package/dist/store/rejected-values.js +16 -10
- 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/rows.js +2 -2
- package/dist/store/rule-sql.d.ts +11 -0
- package/dist/store/rule-sql.js +31 -6
- package/dist/store/search-rows.d.ts +5 -5
- package/dist/store/search-rows.js +18 -16
- 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 +6 -4
- package/dist/store/sqlite/entry-writes-group.d.ts +3 -3
- package/dist/store/sqlite/entry-writes-group.js +3 -3
- 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 +11 -0
- package/dist/store/sqlite/held-connection.js +41 -0
- package/dist/store/sqlite/last-recall-group.d.ts +13 -0
- package/dist/store/sqlite/last-recall-group.js +57 -0
- package/dist/store/sqlite/local.d.ts +0 -17
- package/dist/store/sqlite/local.js +0 -31
- package/dist/store/sqlite/maintenance-groups.d.ts +6 -0
- package/dist/store/sqlite/maintenance-groups.js +60 -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 +15 -7
- package/dist/store/sqlite/store.d.ts +1 -8
- package/dist/store/sqlite/store.js +13 -22
- package/dist/store/summaries.d.ts +10 -3
- package/dist/store/summaries.js +54 -11
- package/dist/store/token-ledger-rows.js +3 -2
- package/dist/store/token-ledger.d.ts +0 -7
- package/dist/store/token-ledger.js +0 -35
- package/dist/store/vector-index.js +8 -4
- 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 +6 -1
- package/dist/util/anthropic-messages.js +26 -7
- package/dist/util/atomic-write.d.ts +5 -2
- package/dist/util/atomic-write.js +12 -8
- 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 +12 -2
- package/dist/util/env.js +12 -2
- package/dist/util/format.d.ts +5 -0
- package/dist/util/format.js +10 -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 +9 -3
- package/dist/util/request-scope.js +18 -9
- package/dist/util/secret-detect.js +6 -1
- package/dist/util/spawn-argv.d.ts +9 -0
- package/dist/util/spawn-argv.js +57 -0
- package/dist/util/sql.d.ts +3 -0
- package/dist/util/sql.js +6 -0
- 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/vector-codec.d.ts +4 -0
- package/dist/util/vector-codec.js +15 -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 +4 -2
- package/dist/api/on-store.d.ts +0 -16
- package/dist/api/on-store.js +0 -38
- 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): Promise<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 async function repairQualityOnceAt(root, tenantId) {
|
|
9
9
|
try {
|
|
10
|
-
const result =
|
|
10
|
+
const result = await 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,8 +59,9 @@ ${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}`;
|
|
64
|
+
case 'empty': return 'refine: response held no text';
|
|
61
65
|
}
|
|
62
66
|
}
|
|
63
67
|
function isConsolidated(entry) {
|
|
@@ -74,9 +78,10 @@ export async function refineStore(hippoRoot, opts) {
|
|
|
74
78
|
failed: 0,
|
|
75
79
|
details: [],
|
|
76
80
|
};
|
|
77
|
-
//
|
|
78
|
-
|
|
79
|
-
const
|
|
81
|
+
// No tenant means every tenant, so the ctx's own tenant is never read.
|
|
82
|
+
const ctx = cliApiContext(hippoRoot, opts.tenantId ?? '');
|
|
83
|
+
const reach = { everyTenant: opts.tenantId === undefined };
|
|
84
|
+
const entries = listMemories(ctx, reach);
|
|
80
85
|
let processed = 0;
|
|
81
86
|
for (const entry of entries) {
|
|
82
87
|
if (!isConsolidated(entry))
|
|
@@ -90,22 +95,18 @@ export async function refineStore(hippoRoot, opts) {
|
|
|
90
95
|
if (opts.limit !== undefined && processed >= opts.limit)
|
|
91
96
|
break;
|
|
92
97
|
processed++;
|
|
93
|
-
await refineOneEntry(
|
|
98
|
+
await refineOneEntry(ctx, reach, entry, opts, result);
|
|
94
99
|
}
|
|
95
100
|
return result;
|
|
96
101
|
}
|
|
97
|
-
async function refineOneEntry(
|
|
102
|
+
async function refineOneEntry(ctx, reach, entry, opts, result) {
|
|
98
103
|
// Best-effort: walk parents_json (schema v9) to fetch originals. When
|
|
99
104
|
// parents aren't recorded we still refine using just the merged content.
|
|
100
|
-
const sources = [];
|
|
101
105
|
const parentIds = Array.isArray(entry.parents) ? entry.parents : [];
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
if (p)
|
|
107
|
-
sources.push(p);
|
|
108
|
-
}
|
|
106
|
+
// Parent lookup is tenant-scoped; cross-tenant parents are absent and skipped,
|
|
107
|
+
// so refine still works from the merged content alone.
|
|
108
|
+
const found = new Map(chunked(parentIds).flatMap((chunk) => listMemoriesByIds(ctx, chunk, reach)).map((p) => [p.id, p]));
|
|
109
|
+
const sources = parentIds.flatMap((pid) => found.get(pid) ?? []);
|
|
109
110
|
const refined = await refineSemanticMemory(entry.content, sources, {
|
|
110
111
|
apiKey: opts.apiKey,
|
|
111
112
|
model: opts.model,
|
|
@@ -121,7 +122,7 @@ async function refineOneEntry(hippoRoot, entry, opts, result) {
|
|
|
121
122
|
result.details.push({ id: entry.id, status: 'refined', reason: 'dry-run (no write)' });
|
|
122
123
|
return;
|
|
123
124
|
}
|
|
124
|
-
storeRefinement(cliApiContext(hippoRoot, entry.
|
|
125
|
+
storeRefinement(cliApiContext(ctx.hippoRoot, entry.tenant_id), entry, refined);
|
|
125
126
|
result.refined++;
|
|
126
127
|
result.details.push({ id: entry.id, status: 'refined' });
|
|
127
128
|
}
|
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';
|
|
@@ -98,7 +97,7 @@ async function cmdRemember(hippoRoot, tenantId, text, flags) {
|
|
|
98
97
|
const { requested: requestedTags, all: allTags } = rememberTags(flags, process.cwd());
|
|
99
98
|
const envelope = parseRememberEnvelope(flags);
|
|
100
99
|
const ctx = cliApiContext(targetRoot, tenantId);
|
|
101
|
-
const outcome = api.rememberLocally(ctx, {
|
|
100
|
+
const outcome = await api.rememberLocally(ctx, {
|
|
102
101
|
content: text,
|
|
103
102
|
kind: envelope.kind,
|
|
104
103
|
scope: envelope.scope ?? undefined,
|
|
@@ -174,7 +173,7 @@ async function cmdSupersede(hippoRoot, tenantId, oldId, newContent, flags) {
|
|
|
174
173
|
};
|
|
175
174
|
let newId;
|
|
176
175
|
try {
|
|
177
|
-
({ newId } = api.supersede(cliApiContext(hippoRoot, tenantId), oldId, newContent, overrides));
|
|
176
|
+
({ newId } = await api.supersede(cliApiContext(hippoRoot, tenantId), oldId, newContent, overrides));
|
|
178
177
|
}
|
|
179
178
|
catch (err) {
|
|
180
179
|
if (err instanceof NotFoundError)
|
|
@@ -206,7 +205,7 @@ function traceTags(flags) {
|
|
|
206
205
|
? [String(rawTags)]
|
|
207
206
|
: [];
|
|
208
207
|
}
|
|
209
|
-
function cmdTraceRecord(hippoRoot, tenantId, flags) {
|
|
208
|
+
async function cmdTraceRecord(hippoRoot, tenantId, flags) {
|
|
210
209
|
requireInit(hippoRoot);
|
|
211
210
|
const task = String(flags['task'] ?? '').trim();
|
|
212
211
|
const stepsJson = String(flags['steps'] ?? '').trim();
|
|
@@ -228,7 +227,7 @@ function cmdTraceRecord(hippoRoot, tenantId, flags) {
|
|
|
228
227
|
steps,
|
|
229
228
|
outcome,
|
|
230
229
|
});
|
|
231
|
-
const { id } = api.remember(cliApiContext(hippoRoot, tenantId), {
|
|
230
|
+
const { id } = await api.remember(cliApiContext(hippoRoot, tenantId), {
|
|
232
231
|
content,
|
|
233
232
|
tags,
|
|
234
233
|
local: {
|
|
@@ -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();
|
|
@@ -427,7 +427,7 @@ export async function handleSupersede({ hippoRoot, tenantId, args, flags }) {
|
|
|
427
427
|
export async function handleTrace({ hippoRoot, tenantId, args, flags }) {
|
|
428
428
|
const sub = args[0] ? String(args[0]) : '';
|
|
429
429
|
if (sub === 'record') {
|
|
430
|
-
cmdTraceRecord(hippoRoot, tenantId, flags);
|
|
430
|
+
await cmdTraceRecord(hippoRoot, tenantId, flags);
|
|
431
431
|
return;
|
|
432
432
|
}
|
|
433
433
|
if (!sub) {
|
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
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
// Long-running verbs: `hippo dashboard`, `hippo mcp` and `hippo serve`.
|
|
2
2
|
import { installCrashHandlers } from '../util/crash-handlers.js';
|
|
3
|
-
import { envAllowKeylessLocal, envPort, envRequireAuth, envTlsCert, envTlsKey } from '../util/env.js';
|
|
3
|
+
import { envAllowKeylessLocal, envKeylessLocalRole, envPort, envRequireAuth, envTlsCert, envTlsKey } from '../util/env.js';
|
|
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 { flagIsTrue, 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.
|
|
@@ -52,7 +52,10 @@ function keyRuleLine() {
|
|
|
52
52
|
if (envRequireAuth())
|
|
53
53
|
return 'every request needs an API key (HIPPO_REQUIRE_AUTH=1)';
|
|
54
54
|
if (envAllowKeylessLocal()) {
|
|
55
|
-
|
|
55
|
+
const role = envKeylessLocalRole() === 'admin'
|
|
56
|
+
? 'act as host admin (HIPPO_ALLOW_KEYLESS_LOCAL=1, HIPPO_KEYLESS_LOCAL_ROLE=admin)'
|
|
57
|
+
: 'act as a member (HIPPO_ALLOW_KEYLESS_LOCAL=1; HIPPO_KEYLESS_LOCAL_ROLE=admin opens sleep and the quarantine routes)';
|
|
58
|
+
return `requests from this machine need no API key and ${role}; unset HIPPO_ALLOW_KEYLESS_LOCAL to require a key on every request`;
|
|
56
59
|
}
|
|
57
60
|
return 'every request needs an API key: mint one with `hippo auth create` and send it as "Authorization: Bearer <key>" ' +
|
|
58
61
|
'(the hippo CLI reads HIPPO_API_KEY). To let requests from this machine in without a key, start with HIPPO_ALLOW_KEYLESS_LOCAL=1';
|
|
@@ -68,7 +71,9 @@ export async function handleServe({ hippoRoot, flags }) {
|
|
|
68
71
|
const host = stringFlag(flags, 'host') ?? DEFAULT_SERVER_HOST;
|
|
69
72
|
const tls = readTlsFiles(flags);
|
|
70
73
|
const { serve } = await import('../server.js');
|
|
71
|
-
|
|
74
|
+
// Unset rather than false without the flag, so HIPPO_ALLOW_CLEARTEXT=1 still applies.
|
|
75
|
+
const allowCleartext = flagIsTrue(flags, 'allow-cleartext') || undefined;
|
|
76
|
+
const handle = await serve({ hippoRoot, port, host, handleSignals: true, tls, allowCleartext });
|
|
72
77
|
console.log(`hippo serve listening on ${handle.url} (pid ${process.pid})`);
|
|
73
78
|
console.log(keyRuleLine());
|
|
74
79
|
console.log(`pidfile: ${path.join(hippoRoot, 'server.pid')}`);
|
|
@@ -3,14 +3,10 @@ import { type CliFlags, type CommandContext } from './flag-values.js';
|
|
|
3
3
|
* The child logs to a file that the next SessionStart reads via `hippo last-sleep`. */
|
|
4
4
|
export declare function handleSessionEnd({ hippoRoot, tenantId, flags }: CommandContext): Promise<void>;
|
|
5
5
|
export declare function handleSessionEndWorker({ hippoRoot, tenantId, flags }: CommandContext): Promise<void>;
|
|
6
|
-
/** Quotes one cmd.exe argument; each `%` leaves the quotes as `^%`, so no %NAME% pair can expand. */
|
|
7
|
-
export declare function quoteCmdArg(arg: string): string;
|
|
8
|
-
/** cmd.exe arguments that run a .cmd or .bat shim with every forwarded argument delivered verbatim. */
|
|
9
|
-
export declare function cmdShimArgs(shimPath: string, forwardArgs: readonly string[]): string[];
|
|
10
6
|
export declare function handleCodexRun({ hippoRoot, tenantId, args }: CommandContext): void;
|
|
11
7
|
export declare function cmdCodexSessionEndWorker(hippoRoot: string, tenantId: string, flags: CliFlags): Promise<void>;
|
|
12
8
|
export declare function handleCodexSessionEndWorker({ hippoRoot, tenantId, flags }: CommandContext): Promise<void>;
|
|
13
|
-
export declare function handlePreCompact({ hippoRoot, flags }: CommandContext): Promise<void>;
|
|
9
|
+
export declare function handlePreCompact({ hippoRoot, tenantId, flags }: CommandContext): Promise<void>;
|
|
14
10
|
export declare function handlePostCompact({ hippoRoot, flags }: CommandContext): Promise<void>;
|
|
15
11
|
export declare function handleCaptureError({ hippoRoot, tenantId, flags }: CommandContext): Promise<void>;
|
|
16
12
|
export declare function handleCompactResume({ hippoRoot, tenantId }: CommandContext): Promise<void>;
|