hippo-memory 1.70.0 → 1.71.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/claude-code.d.ts +4 -2
- package/dist/agent-memories/claude-code.js +14 -5
- package/dist/agent-memories/files.js +23 -12
- package/dist/agent-memories/markdown.d.ts +1 -3
- package/dist/agent-memories/markdown.js +1 -3
- package/dist/agent-memories/report.js +2 -1
- package/dist/agent-memories/sync.d.ts +4 -2
- package/dist/agent-memories/sync.js +10 -5
- package/dist/api/assemble.d.ts +7 -44
- package/dist/api/assemble.js +2 -22
- package/dist/api/audit.d.ts +5 -1
- package/dist/api/audit.js +9 -1
- package/dist/api/auth.d.ts +13 -22
- package/dist/api/auth.js +34 -24
- package/dist/api/auto-sleep.js +2 -2
- package/dist/api/availability.d.ts +2 -15
- package/dist/api/availability.js +2 -15
- package/dist/api/context-select.js +3 -4
- package/dist/api/context-types.d.ts +10 -35
- package/dist/api/context.d.ts +5 -22
- package/dist/api/context.js +21 -38
- package/dist/api/dormant.d.ts +5 -21
- package/dist/api/dormant.js +7 -26
- package/dist/api/drill-down.d.ts +7 -46
- package/dist/api/drill-down.js +5 -26
- package/dist/api/forget.d.ts +5 -24
- package/dist/api/forget.js +5 -28
- package/dist/api/graph.d.ts +8 -0
- package/dist/api/graph.js +7 -0
- package/dist/api/index.d.ts +2 -0
- package/dist/api/index.js +2 -0
- package/dist/api/instruction-detect.js +16 -5
- package/dist/api/ledger-db.d.ts +2 -1
- package/dist/api/ledger-db.js +5 -3
- package/dist/api/memories.d.ts +5 -0
- package/dist/api/memories.js +7 -0
- package/dist/api/objects.d.ts +9 -0
- package/dist/api/objects.js +11 -0
- package/dist/api/on-store.js +5 -3
- package/dist/api/predictions.d.ts +9 -0
- package/dist/api/predictions.js +18 -0
- package/dist/api/promote.d.ts +13 -17
- package/dist/api/promote.js +11 -19
- package/dist/api/prompt-hook.d.ts +4 -4
- package/dist/api/prompt-hook.js +10 -9
- package/dist/api/recall-cli.d.ts +55 -0
- package/dist/api/recall-cli.js +94 -0
- package/dist/api/recall-core.js +14 -6
- package/dist/api/recall-finish.d.ts +53 -0
- package/dist/api/recall-finish.js +30 -0
- package/dist/api/recall-history.d.ts +17 -84
- package/dist/api/recall-history.js +15 -88
- package/dist/api/recall-pipeline.d.ts +2 -3
- package/dist/api/recall-pipeline.js +16 -9
- package/dist/api/recall-types.d.ts +64 -304
- package/dist/api/recall.d.ts +5 -33
- package/dist/api/recall.js +59 -60
- package/dist/api/refine.d.ts +7 -0
- package/dist/api/refine.js +10 -0
- package/dist/api/remember-local.d.ts +57 -0
- package/dist/api/remember-local.js +90 -0
- package/dist/api/remember.d.ts +18 -1
- package/dist/api/remember.js +13 -1
- package/dist/api/sleep-run.d.ts +1 -3
- package/dist/api/sleep-run.js +17 -21
- package/dist/api/sleep.d.ts +9 -28
- package/dist/api/tokens.d.ts +3 -10
- package/dist/api/tokens.js +3 -10
- package/dist/api/types.d.ts +6 -29
- package/dist/api/types.js +4 -22
- package/dist/capture/command.d.ts +4 -12
- package/dist/capture/command.js +6 -22
- package/dist/capture/compact.d.ts +4 -15
- package/dist/capture/compact.js +16 -25
- package/dist/capture/compaction-record.js +101 -69
- package/dist/capture/compaction-spool.d.ts +1 -1
- package/dist/capture/compaction-spool.js +1 -1
- package/dist/capture/session-digest.d.ts +1 -1
- package/dist/capture/session-digest.js +13 -7
- package/dist/capture/transcript.d.ts +2 -10
- package/dist/capture/transcript.js +4 -18
- package/dist/cli/api-context.d.ts +3 -0
- package/dist/cli/api-context.js +6 -0
- package/dist/cli/audit-prune.d.ts +6 -39
- package/dist/cli/audit-prune.js +6 -39
- package/dist/cli/audit.d.ts +1 -1
- package/dist/cli/audit.js +33 -34
- package/dist/cli/auth.d.ts +2 -2
- package/dist/cli/auth.js +57 -39
- package/dist/cli/briefs.d.ts +4 -4
- package/dist/cli/briefs.js +18 -22
- package/dist/cli/card.d.ts +2 -2
- package/dist/cli/card.js +31 -32
- package/dist/cli/client.d.ts +7 -27
- package/dist/cli/client.js +24 -43
- package/dist/cli/compact-resume-payload.js +3 -2
- package/dist/cli/context.d.ts +1 -2
- package/dist/cli/context.js +12 -8
- package/dist/cli/continuity.d.ts +6 -6
- package/dist/cli/continuity.js +62 -64
- package/dist/cli/correction-latency.d.ts +2 -14
- package/dist/cli/correction-latency.js +2 -14
- package/dist/cli/curate.d.ts +13 -17
- package/dist/cli/curate.js +68 -92
- package/dist/cli/dag.d.ts +4 -4
- package/dist/cli/dag.js +33 -27
- package/dist/cli/decisions.d.ts +4 -4
- package/dist/cli/decisions.js +33 -47
- package/dist/cli/eval.js +15 -13
- package/dist/cli/exit.d.ts +6 -0
- package/dist/cli/exit.js +11 -0
- package/dist/cli/explain.d.ts +1 -2
- package/dist/cli/explain.js +6 -4
- package/dist/cli/flag-values.d.ts +6 -1
- package/dist/cli/flag-values.js +27 -10
- package/dist/cli/flags.d.ts +1 -0
- package/dist/cli/flags.js +1 -1
- package/dist/cli/github.d.ts +14 -0
- package/dist/{connectors/github/cli-impl.js → cli/github.js} +43 -71
- package/dist/cli/goals.d.ts +2 -2
- package/dist/cli/goals.js +46 -50
- package/dist/cli/hook-runtime.d.ts +9 -27
- package/dist/cli/hook-runtime.js +15 -31
- package/dist/cli/init.d.ts +2 -2
- package/dist/cli/init.js +6 -12
- package/dist/cli/install-steps.js +3 -12
- package/dist/cli/last-sleep.d.ts +2 -1
- package/dist/cli/last-sleep.js +3 -0
- package/dist/cli/maintenance.d.ts +4 -4
- package/dist/cli/maintenance.js +14 -19
- package/dist/cli/object-verbs.js +4 -3
- package/dist/cli/owner-validation.d.ts +5 -28
- package/dist/cli/owner-validation.js +5 -28
- package/dist/cli/playbooks.d.ts +4 -4
- package/dist/cli/playbooks.js +23 -28
- package/dist/cli/print.d.ts +2 -5
- package/dist/cli/print.js +1 -4
- package/dist/cli/projects.d.ts +2 -2
- package/dist/cli/projects.js +1 -3
- package/dist/cli/provenance-coverage.d.ts +2 -6
- package/dist/cli/provenance-coverage.js +2 -6
- package/dist/cli/quality-repair-once.js +2 -2
- package/dist/cli/recall.d.ts +2 -4
- package/dist/cli/recall.js +55 -131
- package/dist/cli/refine-llm.d.ts +5 -31
- package/dist/cli/refine-llm.js +9 -36
- package/dist/cli/remember.d.ts +3 -3
- package/dist/cli/remember.js +122 -180
- package/dist/cli/scheduler.d.ts +2 -17
- package/dist/cli/scheduler.js +12 -18
- package/dist/cli/serve.js +21 -12
- package/dist/cli/session-hooks.d.ts +10 -18
- package/dist/cli/session-hooks.js +112 -113
- package/dist/cli/setup.d.ts +4 -4
- package/dist/cli/setup.js +19 -21
- package/dist/cli/shared.d.ts +9 -23
- package/dist/cli/shared.js +9 -32
- package/dist/cli/slack.d.ts +2 -2
- package/dist/cli/slack.js +19 -23
- package/dist/cli/sleep.d.ts +3 -2
- package/dist/cli/sleep.js +15 -16
- package/dist/cli/status.d.ts +9 -12
- package/dist/cli/status.js +55 -98
- package/dist/cli/stdin.d.ts +4 -6
- package/dist/cli/stdin.js +2 -3
- package/dist/cli/transfer.d.ts +9 -9
- package/dist/cli/transfer.js +66 -89
- package/dist/cli/usage.js +11 -5
- package/dist/cli.d.ts +66 -448
- package/dist/cli.js +87 -263
- package/dist/connectors/github/backfill.d.ts +5 -25
- package/dist/connectors/github/backfill.js +14 -49
- package/dist/connectors/github/deletion.d.ts +4 -18
- package/dist/connectors/github/deletion.js +2 -15
- package/dist/connectors/github/dlq.d.ts +8 -33
- package/dist/connectors/github/dlq.js +12 -29
- package/dist/connectors/github/ingest.d.ts +2 -6
- package/dist/connectors/github/ingest.js +4 -10
- package/dist/connectors/github/octokit-client.d.ts +4 -16
- package/dist/connectors/github/octokit-client.js +27 -24
- package/dist/connectors/github/ratelimit.d.ts +3 -14
- package/dist/connectors/github/ratelimit.js +3 -14
- package/dist/connectors/github/scope.d.ts +3 -5
- package/dist/connectors/github/scope.js +3 -5
- package/dist/connectors/github/signature.d.ts +4 -26
- package/dist/connectors/github/signature.js +4 -26
- package/dist/connectors/github/tenant-routing.d.ts +2 -24
- package/dist/connectors/github/tenant-routing.js +4 -26
- package/dist/connectors/github/transform.js +2 -16
- package/dist/connectors/github/types.d.ts +3 -15
- package/dist/connectors/github/types.js +2 -9
- package/dist/connectors/github/webhook.d.ts +2 -16
- package/dist/connectors/github/webhook.js +6 -22
- package/dist/connectors/slack/backfill.d.ts +4 -17
- package/dist/connectors/slack/backfill.js +4 -13
- package/dist/connectors/slack/dlq.d.ts +2 -19
- package/dist/connectors/slack/dlq.js +2 -19
- package/dist/connectors/slack/ingest.d.ts +2 -3
- package/dist/connectors/slack/ingest.js +2 -3
- package/dist/connectors/slack/scope.d.ts +2 -8
- package/dist/connectors/slack/scope.js +2 -8
- package/dist/connectors/slack/signature.d.ts +1 -6
- package/dist/connectors/slack/tenant-routing.d.ts +2 -19
- package/dist/connectors/slack/tenant-routing.js +2 -21
- package/dist/connectors/slack/transform.d.ts +2 -18
- package/dist/connectors/slack/transform.js +2 -18
- package/dist/connectors/slack/types.d.ts +3 -9
- package/dist/connectors/slack/types.js +2 -4
- package/dist/connectors/slack/web-client.js +33 -27
- package/dist/connectors/slack/webhook.d.ts +2 -19
- package/dist/connectors/slack/webhook.js +5 -26
- package/dist/connectors/slack/workspaces.d.ts +4 -24
- package/dist/connectors/slack/workspaces.js +4 -24
- package/dist/consolidate/conflicts.js +6 -14
- package/dist/consolidate/dag-summary.d.ts +8 -0
- package/dist/consolidate/dag-summary.js +41 -0
- package/dist/consolidate/dag.d.ts +5 -28
- package/dist/consolidate/dag.js +14 -75
- package/dist/consolidate/decay.js +7 -19
- package/dist/consolidate/dedupe.d.ts +6 -52
- package/dist/consolidate/dedupe.js +13 -71
- package/dist/consolidate/flush-units.d.ts +3 -4
- package/dist/consolidate/flush-units.js +3 -3
- package/dist/consolidate/half-life-migration.d.ts +3 -26
- package/dist/consolidate/half-life-migration.js +11 -28
- package/dist/consolidate/llm-passes.js +4 -21
- package/dist/consolidate/memory-value-weights.d.ts +2 -13
- package/dist/consolidate/memory-value-weights.js +2 -13
- package/dist/consolidate/memory-value.d.ts +11 -84
- package/dist/consolidate/memory-value.js +16 -104
- package/dist/consolidate/merge.js +10 -31
- package/dist/consolidate/merged-row.js +2 -1
- package/dist/consolidate/physics-pass.js +1 -3
- package/dist/consolidate/replay.d.ts +6 -38
- package/dist/consolidate/replay.js +14 -52
- package/dist/consolidate/run.js +1 -1
- package/dist/consolidate/sleep.d.ts +1 -8
- package/dist/consolidate/sleep.js +5 -17
- package/dist/consolidate/trace.d.ts +3 -18
- package/dist/consolidate/trace.js +3 -18
- package/dist/consolidate/traces.js +6 -22
- package/dist/core/ablation.d.ts +4 -91
- package/dist/core/ablation.js +4 -91
- package/dist/core/ambient.d.ts +1 -8
- package/dist/core/ambient.js +1 -8
- package/dist/core/capture-contract.d.ts +4 -2
- package/dist/core/capture-contract.js +4 -2
- package/dist/core/card.d.ts +4 -1
- package/dist/core/card.js +8 -0
- package/dist/core/compare.d.ts +11 -67
- package/dist/core/compare.js +9 -63
- package/dist/core/config.d.ts +10 -24
- package/dist/core/config.js +13 -14
- package/dist/core/handoff.d.ts +1 -7
- package/dist/core/handoff.js +1 -7
- package/dist/core/memory-quality.js +1 -1
- package/dist/core/memory.d.ts +41 -164
- package/dist/core/memory.js +51 -221
- package/dist/core/package-root.d.ts +3 -0
- package/dist/core/package-root.js +5 -0
- package/dist/core/physics-config.d.ts +1 -4
- package/dist/core/physics-config.js +3 -8
- package/dist/core/physics.d.ts +15 -61
- package/dist/core/physics.js +59 -122
- package/dist/core/project-identity.d.ts +17 -58
- package/dist/core/project-identity.js +17 -38
- package/dist/core/project-remote.js +13 -2
- package/dist/core/raw-append-only.d.ts +5 -0
- package/dist/core/raw-append-only.js +7 -0
- package/dist/core/salience.d.ts +1 -7
- package/dist/core/salience.js +1 -7
- package/dist/dashboard/dashboard-actions.js +2 -2
- package/dist/dashboard/dashboard-snapshot.d.ts +2 -1
- package/dist/dashboard/dashboard-snapshot.js +11 -2
- package/dist/dashboard/dashboard-types.d.ts +2 -1
- package/dist/dashboard/dashboard.d.ts +1 -0
- package/dist/dashboard/dashboard.js +50 -4
- package/dist/db/busy.d.ts +1 -1
- package/dist/db/busy.js +17 -8
- package/dist/db/connect.d.ts +1 -0
- package/dist/db/connect.js +3 -3
- package/dist/db/migrate.js +3 -3
- package/dist/db/migrations/types.d.ts +2 -5
- package/dist/db/migrations/v14.js +2 -3
- package/dist/db/migrations/v15.js +2 -8
- package/dist/db/migrations/v16.js +2 -3
- package/dist/db/migrations/v17.js +2 -3
- package/dist/db/migrations/v19.js +2 -5
- package/dist/db/migrations/v20.js +2 -7
- package/dist/db/migrations/v22.js +4 -17
- package/dist/db/migrations/v23.js +3 -14
- package/dist/db/migrations/v24.js +2 -4
- package/dist/db/migrations/v25.js +3 -8
- package/dist/db/migrations/v26.js +2 -13
- package/dist/db/migrations/v27.js +3 -11
- package/dist/db/migrations/v28.js +2 -14
- package/dist/db/migrations/v29.js +4 -18
- package/dist/db/migrations/v30.js +4 -16
- package/dist/db/migrations/v31.js +2 -15
- package/dist/db/migrations/v32.js +4 -22
- package/dist/db/migrations/v33.js +2 -15
- package/dist/db/migrations/v34.js +2 -11
- package/dist/db/migrations/v35.js +2 -11
- package/dist/db/migrations/v36.js +2 -11
- package/dist/db/migrations/v37.js +8 -33
- package/dist/db/migrations/v38.js +5 -38
- package/dist/db/migrations/v39.js +9 -20
- package/dist/db/migrations/v40.js +2 -9
- package/dist/db/migrations/v41.js +2 -24
- package/dist/db/migrations/v43.js +1 -1
- package/dist/db/migrations/v44.js +2 -8
- package/dist/db/migrations/v45.js +2 -7
- package/dist/db/migrations/v47.js +2 -3
- package/dist/db/migrations/v51.js +1 -1
- package/dist/db/open.d.ts +2 -0
- package/dist/db/open.js +17 -1
- package/dist/db/physics-state.d.ts +6 -22
- package/dist/db/physics-state.js +25 -36
- package/dist/db/raw-archive-mirror-cleanup.d.ts +2 -17
- package/dist/db/raw-archive-mirror-cleanup.js +2 -17
- package/dist/db/vector-store.d.ts +2 -0
- package/dist/db/vector-store.js +8 -1
- package/dist/doctor.js +74 -19
- package/dist/entry/session-text.js +2 -1
- package/dist/eval/eval-stats.d.ts +15 -53
- package/dist/eval/eval-stats.js +12 -42
- package/dist/eval/eval-suite.d.ts +2 -13
- package/dist/eval/eval-suite.js +74 -34
- package/dist/eval/eval.d.ts +6 -24
- package/dist/eval/eval.js +7 -34
- package/dist/eval/judgment.d.ts +0 -3
- package/dist/eval/judgment.js +19 -11
- package/dist/extensions/openclaw-plugin/index.js +1 -1
- package/dist/graph/extract.d.ts +5 -27
- package/dist/graph/extract.js +7 -33
- package/dist/graph/recall.d.ts +7 -20
- package/dist/graph/recall.js +14 -76
- package/dist/graph/stream.d.ts +7 -39
- package/dist/graph/stream.js +11 -34
- package/dist/graph/view.d.ts +9 -35
- package/dist/graph/view.js +11 -39
- package/dist/hooks/codex-wrapper.js +2 -2
- package/dist/hooks/copilot.js +2 -1
- package/dist/hooks/hook-blocks.d.ts +6 -2
- package/dist/hooks/hook-blocks.js +37 -124
- package/dist/hooks/json-hooks.d.ts +4 -36
- package/dist/hooks/json-hooks.js +18 -57
- package/dist/hooks/opencode.d.ts +0 -38
- package/dist/hooks/opencode.js +9 -76
- package/dist/hooks/shared.d.ts +8 -17
- package/dist/hooks/shared.js +29 -20
- package/dist/importers/core.d.ts +12 -37
- package/dist/importers/core.js +9 -27
- package/dist/importers/markdown-parse.d.ts +8 -22
- package/dist/importers/markdown-parse.js +8 -25
- package/dist/importers/markdown.js +3 -12
- package/dist/importers/sources.js +7 -35
- package/dist/importers/vault.d.ts +2 -8
- package/dist/importers/vault.js +25 -81
- package/dist/index.d.ts +6 -2
- package/dist/index.js +6 -2
- package/dist/learn/autolearn.d.ts +14 -41
- package/dist/learn/autolearn.js +14 -41
- package/dist/learn/extract.js +2 -4
- package/dist/learn/forward-claim-detector.d.ts +6 -30
- package/dist/learn/forward-claim-detector.js +14 -66
- package/dist/learn/invalidation.d.ts +6 -18
- package/dist/learn/invalidation.js +9 -26
- package/dist/mcp/admin-tools.js +3 -5
- package/dist/mcp/memory-tools.js +4 -9
- package/dist/mcp/protocol.d.ts +8 -26
- package/dist/mcp/protocol.js +3 -6
- package/dist/mcp/recall-tools.js +3 -3
- package/dist/mcp/request.d.ts +3 -11
- package/dist/mcp/request.js +10 -26
- package/dist/mcp/server.d.ts +3 -9
- package/dist/mcp/server.js +5 -16
- package/dist/mcp/session-state.d.ts +1 -1
- package/dist/mcp/session-state.js +5 -11
- package/dist/mcp/stdio.d.ts +2 -6
- package/dist/mcp/stdio.js +48 -12
- package/dist/mcp/tools.js +5 -3
- package/dist/objects/customer-notes.d.ts +7 -42
- package/dist/objects/customer-notes.js +7 -48
- package/dist/objects/decisions.d.ts +12 -50
- package/dist/objects/decisions.js +15 -53
- package/dist/objects/incidents.d.ts +7 -38
- package/dist/objects/incidents.js +7 -41
- package/dist/objects/policies.d.ts +11 -89
- package/dist/objects/policies.js +11 -98
- package/dist/objects/processes.d.ts +7 -52
- package/dist/objects/processes.js +7 -61
- package/dist/objects/project-briefs.d.ts +11 -55
- package/dist/objects/project-briefs.js +14 -75
- package/dist/objects/skills.d.ts +7 -42
- package/dist/objects/skills.js +8 -54
- package/dist/postinstall.js +6 -19
- package/dist/predictions/planning-fallacy.d.ts +11 -34
- package/dist/rerankers/clef.js +3 -31
- package/dist/rerankers/cross-encoder.js +4 -6
- package/dist/rerankers/jev.js +9 -6
- package/dist/rerankers/llm.d.ts +2 -11
- package/dist/rerankers/llm.js +14 -14
- package/dist/rerankers/outage-warning.d.ts +2 -1
- package/dist/rerankers/outage-warning.js +2 -1
- package/dist/rerankers/remote.d.ts +1 -0
- package/dist/rerankers/remote.js +2 -0
- package/dist/rerankers/types.d.ts +2 -14
- package/dist/search/boosts.d.ts +0 -2
- package/dist/search/boosts.js +2 -2
- package/dist/search/goal-boost.d.ts +23 -0
- package/dist/search/goal-boost.js +90 -0
- package/dist/search/hybrid.d.ts +2 -0
- package/dist/search/multihop.js +2 -3
- package/dist/search/path-context.d.ts +5 -18
- package/dist/search/path-context.js +5 -18
- package/dist/search/physics-search.js +11 -8
- package/dist/search/rrf.d.ts +7 -35
- package/dist/search/rrf.js +5 -30
- package/dist/search/vector.d.ts +7 -0
- package/dist/search/vector.js +35 -5
- package/dist/server/auth.d.ts +9 -28
- package/dist/server/auth.js +32 -25
- package/dist/server/boot.d.ts +2 -21
- package/dist/server/boot.js +63 -96
- package/dist/server/client-ip.d.ts +3 -19
- package/dist/server/client-ip.js +5 -28
- package/dist/server/defaults.d.ts +3 -0
- package/dist/server/defaults.js +4 -0
- package/dist/server/key-check-bounds.d.ts +2 -1
- package/dist/server/lifecycle.d.ts +5 -4
- package/dist/server/lifecycle.js +19 -4
- package/dist/server/mcp-http.js +10 -44
- package/dist/server/rate-limit.d.ts +5 -18
- package/dist/server/rate-limit.js +4 -13
- package/dist/server/request.d.ts +4 -8
- package/dist/server/request.js +9 -17
- package/dist/server/route-table.js +42 -49
- package/dist/server/routes/admin.js +22 -28
- package/dist/server/routes/customer-notes.js +7 -12
- package/dist/server/routes/decisions.js +10 -17
- package/dist/server/routes/incidents.js +12 -20
- package/dist/server/routes/memories.js +12 -32
- package/dist/server/routes/object-routes.d.ts +0 -5
- package/dist/server/routes/object-routes.js +7 -15
- package/dist/server/routes/policies.js +10 -18
- package/dist/server/routes/predictions.js +13 -25
- package/dist/server/routes/processes.js +16 -26
- package/dist/server/routes/project-briefs.js +9 -16
- package/dist/server/routes/recall.js +10 -35
- package/dist/server/routes/skills.js +8 -18
- package/dist/server/server-detect.d.ts +9 -53
- package/dist/server/server-detect.js +24 -90
- package/dist/server/sleep-offload.js +4 -1
- package/dist/server/types.d.ts +12 -10
- package/dist/server/validation.d.ts +3 -1
- package/dist/server/validation.js +10 -23
- package/dist/server.d.ts +2 -2
- package/dist/server.js +3 -2
- package/dist/sharing/global-store.d.ts +19 -0
- package/dist/sharing/global-store.js +75 -0
- package/dist/sharing/global-sync.d.ts +6 -0
- package/dist/sharing/global-sync.js +80 -0
- package/dist/sharing/project-merge.d.ts +4 -5
- package/dist/sharing/project-merge.js +9 -7
- package/dist/sharing/scope.d.ts +4 -11
- package/dist/sharing/scope.js +4 -11
- package/dist/sharing/search-both.d.ts +60 -0
- package/dist/sharing/search-both.js +138 -0
- package/dist/sharing/share.d.ts +38 -0
- package/dist/sharing/share.js +226 -0
- package/dist/store/ambient.js +4 -9
- package/dist/store/audit-event.d.ts +4 -12
- package/dist/store/audit-event.js +4 -12
- package/dist/store/audit.d.ts +2 -5
- package/dist/store/audit.js +4 -12
- package/dist/store/auth.d.ts +6 -6
- package/dist/store/auth.js +10 -9
- package/dist/store/candidates.d.ts +20 -3
- package/dist/store/candidates.js +77 -48
- package/dist/store/card-detail.d.ts +2 -1
- package/dist/store/card-detail.js +2 -1
- package/dist/store/cards.d.ts +14 -9
- package/dist/store/cards.js +72 -126
- package/dist/store/conflicts.d.ts +4 -21
- package/dist/store/conflicts.js +71 -150
- package/dist/store/connectors/github.d.ts +10 -10
- package/dist/store/connectors/github.js +10 -10
- package/dist/store/dashboard-reads.js +4 -8
- package/dist/store/delete-and-batch.d.ts +11 -31
- package/dist/store/delete-and-batch.js +48 -64
- package/dist/store/delivery-recorder.d.ts +8 -4
- package/dist/store/delivery-recorder.js +25 -15
- package/dist/store/diagnostics.js +6 -13
- package/dist/store/dormant.d.ts +7 -29
- package/dist/store/dormant.js +15 -56
- package/dist/store/embeddings/index.d.ts +11 -80
- package/dist/store/embeddings/index.js +71 -207
- package/dist/store/embeddings/local.js +15 -32
- package/dist/store/embeddings/provider.d.ts +16 -53
- package/dist/store/embeddings/provider.js +41 -69
- package/dist/store/entry-reads.d.ts +21 -57
- package/dist/store/entry-reads.js +65 -126
- package/dist/store/entry-row.d.ts +6 -35
- package/dist/store/entry-row.js +9 -37
- package/dist/store/entry-writes.d.ts +10 -16
- package/dist/store/entry-writes.js +17 -35
- package/dist/store/goals.d.ts +3 -40
- package/dist/store/goals.js +21 -160
- package/dist/store/graph-queue.d.ts +6 -22
- package/dist/store/graph-queue.js +14 -45
- package/dist/store/graph-reads.d.ts +11 -35
- package/dist/store/graph-reads.js +20 -58
- package/dist/store/graph-rows.d.ts +3 -6
- package/dist/store/graph-rows.js +6 -9
- package/dist/store/graph-view-rows.d.ts +2 -1
- package/dist/store/graph-view-rows.js +2 -1
- package/dist/store/graph-writes.d.ts +6 -31
- package/dist/store/graph-writes.js +13 -37
- package/dist/store/half-life.d.ts +2 -1
- package/dist/store/half-life.js +14 -16
- package/dist/store/handoffs.d.ts +5 -11
- package/dist/store/handoffs.js +16 -34
- package/dist/store/index-and-stats.d.ts +6 -19
- package/dist/store/index-and-stats.js +34 -82
- package/dist/store/markdown.d.ts +2 -6
- package/dist/store/markdown.js +21 -20
- package/dist/store/mirrors.d.ts +2 -6
- package/dist/store/mirrors.js +14 -23
- package/dist/store/open.js +6 -13
- package/dist/store/planning-fallacy-evidence.d.ts +2 -30
- package/dist/store/planning-fallacy-evidence.js +8 -37
- package/dist/store/port.d.ts +82 -79
- package/dist/store/predictions.d.ts +11 -51
- package/dist/store/predictions.js +38 -119
- package/dist/{cli → store}/quality-repair.js +15 -31
- package/dist/store/raw-archive.d.ts +4 -16
- package/dist/store/raw-archive.js +14 -29
- package/dist/store/recall-scope.d.ts +19 -79
- package/dist/store/recall-scope.js +21 -82
- package/dist/store/recall-trace.d.ts +10 -77
- package/dist/store/recall-trace.js +19 -95
- package/dist/store/rejected-values.js +7 -19
- package/dist/store/rejection.d.ts +12 -58
- package/dist/store/rejection.js +13 -65
- package/dist/store/report-reads.d.ts +6 -0
- package/dist/store/report-reads.js +29 -0
- package/dist/store/rows.d.ts +9 -19
- package/dist/store/rows.js +36 -34
- package/dist/store/rule-sql.d.ts +5 -0
- package/dist/store/rule-sql.js +37 -0
- package/dist/store/search-rows.d.ts +7 -38
- package/dist/store/search-rows.js +14 -50
- package/dist/store/sessions.d.ts +10 -47
- package/dist/store/sessions.js +17 -73
- package/dist/store/sqlite/connector-events-group.js +2 -2
- package/dist/store/sqlite/entry-writes-group.js +2 -2
- package/dist/store/sqlite/error-codec.js +4 -2
- package/dist/store/sqlite/executor.d.ts +2 -1
- package/dist/store/sqlite/executor.js +2 -1
- package/dist/store/sqlite/local.d.ts +3 -3
- package/dist/store/sqlite/local.js +1 -0
- package/dist/store/sqlite/object-rows.js +6 -3
- package/dist/store/sqlite/objects-group.js +4 -2
- package/dist/store/sqlite/quarantine-group.js +2 -2
- package/dist/store/sqlite/store.d.ts +1 -4
- package/dist/store/sqlite/store.js +2 -3
- package/dist/store/sqlite/vector-reads-group.js +2 -2
- package/dist/store/sqlite/worker-jobs.js +1 -1
- package/dist/store/sqlite/worker-ops.d.ts +13 -2
- package/dist/store/sqlite/worker-ops.js +13 -2
- package/dist/store/sqlite/worker-store.js +5 -2
- package/dist/store/summaries.d.ts +10 -62
- package/dist/store/summaries.js +34 -146
- package/dist/store/summary-dirty.js +1 -1
- package/dist/store/tenant-lookup.d.ts +6 -1
- package/dist/store/tenant-lookup.js +7 -0
- package/dist/store/tenant.d.ts +2 -16
- package/dist/store/tenant.js +4 -19
- package/dist/store/token-ledger.d.ts +13 -43
- package/dist/store/token-ledger.js +19 -50
- package/dist/store/usage-reports.js +5 -13
- package/dist/store/vector-index.d.ts +46 -0
- package/dist/store/vector-index.js +170 -0
- package/dist/store/working-memory.d.ts +6 -25
- package/dist/store/working-memory.js +18 -52
- package/dist/store/yaml.d.ts +1 -5
- package/dist/store/yaml.js +2 -6
- package/dist/support-bundle.js +7 -5
- package/dist/trust/reject-flow.js +1 -3
- package/dist/util/anthropic-messages.js +14 -2
- package/dist/util/atomic-write.d.ts +2 -1
- package/dist/util/atomic-write.js +35 -4
- package/dist/util/capped-json.d.ts +6 -0
- package/dist/util/capped-json.js +46 -0
- package/dist/util/crash-handlers.d.ts +8 -1
- package/dist/util/crash-handlers.js +52 -10
- package/dist/util/env.d.ts +13 -6
- package/dist/util/env.js +14 -7
- package/dist/util/home-path.d.ts +2 -1
- package/dist/util/home-path.js +4 -2
- package/dist/util/http-retry.d.ts +3 -1
- package/dist/util/http-retry.js +26 -5
- package/dist/util/log.d.ts +3 -2
- package/dist/util/log.js +25 -9
- package/dist/util/request-scope.d.ts +2 -1
- package/dist/util/request-scope.js +2 -1
- package/dist/util/secret-detect.d.ts +5 -30
- package/dist/util/secret-detect.js +13 -39
- package/dist/util/stored-json.d.ts +1 -1
- package/dist/util/stored-json.js +1 -1
- package/dist/util/token-text.d.ts +1 -4
- package/dist/util/token-text.js +1 -4
- package/dist/util/transcript-tail.d.ts +2 -0
- package/dist/util/transcript-tail.js +24 -23
- package/dist/util/version.d.ts +5 -20
- package/dist/util/version.js +5 -20
- package/extensions/openclaw-plugin/index.ts +1 -1
- package/extensions/openclaw-plugin/openclaw.plugin.json +1 -1
- package/extensions/openclaw-plugin/package.json +1 -1
- package/openclaw.plugin.json +1 -1
- package/package.json +1 -1
- package/dist/connectors/github/cli-impl.d.ts +0 -25
- package/dist/sharing/shared.d.ts +0 -187
- package/dist/sharing/shared.js +0 -563
- package/dist/store/vector-writes.d.ts +0 -13
- package/dist/store/vector-writes.js +0 -89
- /package/dist/{cli → store}/quality-repair.d.ts +0 -0
package/dist/cli/transfer.js
CHANGED
|
@@ -1,40 +1,38 @@
|
|
|
1
1
|
// Verbs that move memories in and out: watch, learn, import, export, promote, sync, share and peers.
|
|
2
2
|
import * as path from 'path';
|
|
3
3
|
import * as fs from 'fs';
|
|
4
|
-
import { calculateStrength, deriveHalfLife } from '../core/memory.js';
|
|
5
4
|
import { isInitialized } from '../store/open.js';
|
|
6
|
-
import {
|
|
7
|
-
import { readEntry, loadAllEntries } from '../store/entry-reads.js';
|
|
8
|
-
import { schemaFitInStore } from '../store/candidates.js';
|
|
9
|
-
import { updateStats } from '../store/index-and-stats.js';
|
|
5
|
+
import { loadAllEntries } from '../store/entry-reads.js';
|
|
10
6
|
import { RejectedValueError } from '../store/rejection.js';
|
|
11
|
-
import { embedAll
|
|
12
|
-
import {
|
|
7
|
+
import { embedAll } from '../store/embeddings/index.js';
|
|
8
|
+
import { loadEmbeddingIndex } from '../store/vector-index.js';
|
|
13
9
|
import { captureError, runWatched } from '../learn/autolearn.js';
|
|
14
10
|
import { currentMachine, importAtSessionEnd, importForStore } from '../agent-memories/sync.js';
|
|
15
11
|
import { detailLines } from '../agent-memories/report.js';
|
|
16
|
-
import { getGlobalRoot, initGlobal
|
|
12
|
+
import { getGlobalRoot, initGlobal } from '../sharing/global-store.js';
|
|
13
|
+
import { shareMemory, listPeers, autoShare, transferScore } from '../sharing/share.js';
|
|
14
|
+
import { syncGlobalToLocal } from '../sharing/global-sync.js';
|
|
17
15
|
import { importChatGPT, importClaude, importCursor, importGenericFile, } from '../importers/sources.js';
|
|
18
16
|
import { importMarkdown } from '../importers/markdown.js';
|
|
19
17
|
import { importVault } from '../importers/vault.js';
|
|
20
18
|
import * as api from '../api/index.js';
|
|
19
|
+
import { getMemory } from '../api/memories.js';
|
|
21
20
|
import * as client from './client.js';
|
|
22
|
-
import {
|
|
21
|
+
import { cliApiContext } from './api-context.js';
|
|
23
22
|
import { printError } from './output.js';
|
|
24
23
|
import { errorMessage, log } from '../util/log.js';
|
|
25
24
|
import { requireInit, runViaServerIfAvailable, learnFromRepo } from './shared.js';
|
|
26
25
|
import { fmt } from './print.js';
|
|
27
|
-
import { boolFlag, flagIsTrue, nonEmptyStringFlag } from './flag-values.js';
|
|
26
|
+
import { boolFlag, flagIsTrue, isStringFlag, nonEmptyStringFlag } from './flag-values.js';
|
|
28
27
|
import { CONTENT_PREVIEW_CHARS, DATE_PREFIX_CHARS } from '../util/token-text.js';
|
|
28
|
+
import { CliExit } from './exit.js';
|
|
29
29
|
const STDERR_PREVIEW_CHARS = 80;
|
|
30
30
|
const MAX_ENTRIES_SHOWN = 10;
|
|
31
|
-
// ---------------------------------------------------------------------------
|
|
32
31
|
// Watch command
|
|
33
|
-
|
|
34
|
-
async function cmdWatch(command, hippoRoot) {
|
|
32
|
+
async function cmdWatch(command, hippoRoot, tenantId) {
|
|
35
33
|
if (!command) {
|
|
36
34
|
printError('Usage: hippo watch "<command>"');
|
|
37
|
-
|
|
35
|
+
throw new CliExit(1);
|
|
38
36
|
}
|
|
39
37
|
const { exitCode, stderr } = await runWatched(command);
|
|
40
38
|
if (exitCode === 0) {
|
|
@@ -44,18 +42,21 @@ async function cmdWatch(command, hippoRoot) {
|
|
|
44
42
|
// Only create memory if hippo is initialized
|
|
45
43
|
if (!isInitialized(hippoRoot)) {
|
|
46
44
|
printError('Command failed but .hippo not initialized. Run `hippo init` to enable auto-learn.');
|
|
47
|
-
|
|
45
|
+
throw new CliExit(exitCode);
|
|
48
46
|
}
|
|
49
|
-
const
|
|
50
|
-
entry.schema_fit = schemaFitInStore(hippoRoot, entry.tenantId, entry.content, entry.tags);
|
|
51
|
-
entry.half_life_days = deriveHalfLife(loadConfig(hippoRoot).defaultHalfLifeDays, entry);
|
|
52
|
-
entry.strength = calculateStrength(entry);
|
|
47
|
+
const failure = captureError(exitCode, stderr, command, tenantId);
|
|
53
48
|
// A rejection-guard refusal of a failed command's output must not crash the watcher:
|
|
54
49
|
// skip with the message below and still exit with the wrapped command's real exit code.
|
|
55
50
|
try {
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
51
|
+
api.rememberLocally(cliApiContext(hippoRoot, tenantId), {
|
|
52
|
+
content: failure.content,
|
|
53
|
+
tags: failure.tags,
|
|
54
|
+
layer: failure.layer,
|
|
55
|
+
source: failure.source,
|
|
56
|
+
confidence: failure.confidence,
|
|
57
|
+
// A failure is stored each time it happens: watch has never put it to the salience gate.
|
|
58
|
+
force: true,
|
|
59
|
+
});
|
|
59
60
|
const preview = stderr.trim().slice(0, STDERR_PREVIEW_CHARS);
|
|
60
61
|
printError(`\nHippo learned from failure: "${preview}"`);
|
|
61
62
|
}
|
|
@@ -67,16 +68,14 @@ async function cmdWatch(command, hippoRoot) {
|
|
|
67
68
|
throw err;
|
|
68
69
|
}
|
|
69
70
|
}
|
|
70
|
-
|
|
71
|
+
throw new CliExit(exitCode);
|
|
71
72
|
}
|
|
72
|
-
// ---------------------------------------------------------------------------
|
|
73
73
|
// Learn command
|
|
74
|
-
|
|
75
|
-
export function cmdLearn(hippoRoot, flags) {
|
|
74
|
+
export function handleLearn({ hippoRoot, flags }) {
|
|
76
75
|
requireInit(hippoRoot);
|
|
77
76
|
if (!flags['git']) {
|
|
78
77
|
printError('Usage: hippo learn --git [--days <n>] [--repos <paths>]');
|
|
79
|
-
|
|
78
|
+
throw new CliExit(1);
|
|
80
79
|
}
|
|
81
80
|
const days = parseInt(String(flags['days'] ?? '7'), 10);
|
|
82
81
|
console.log(`Scanning git log for the last ${days} days...`);
|
|
@@ -98,9 +97,7 @@ export function cmdLearn(hippoRoot, flags) {
|
|
|
98
97
|
console.log(`Git learn complete: ${added} new lessons added, ${skipped} duplicates skipped.`);
|
|
99
98
|
}
|
|
100
99
|
}
|
|
101
|
-
// ---------------------------------------------------------------------------
|
|
102
100
|
// Import command
|
|
103
|
-
// ---------------------------------------------------------------------------
|
|
104
101
|
/** The rows are saved either way; a failed backfill only delays vectors, so it warns with how many wait and the command that finishes them. */
|
|
105
102
|
function warnBackfillFailed(root, embedCommand, err) {
|
|
106
103
|
let waiting;
|
|
@@ -117,7 +114,7 @@ function warnRedacted(count) {
|
|
|
117
114
|
if (count)
|
|
118
115
|
printError(`Warning: secret-shaped text was redacted from ${count} imported ${count === 1 ? 'entry' : 'entries'} before storing`);
|
|
119
116
|
}
|
|
120
|
-
export function
|
|
117
|
+
export function handleImport({ hippoRoot, tenantId, args, flags }) {
|
|
121
118
|
const useGlobal = boolFlag(flags, 'global');
|
|
122
119
|
const dryRun = boolFlag(flags, 'dry-run');
|
|
123
120
|
const extraTags = Array.isArray(flags['tag'])
|
|
@@ -140,14 +137,10 @@ export function cmdImport(hippoRoot, args, flags) {
|
|
|
140
137
|
extraTags,
|
|
141
138
|
hippoRoot,
|
|
142
139
|
};
|
|
143
|
-
// Vault import
|
|
144
|
-
//
|
|
145
|
-
// separately from the single-file `importer` function-pointer slot below.
|
|
146
|
-
// It writes through api.remember/archiveRaw which are tenant-scoped, so we
|
|
147
|
-
// resolve the tenant and pass it through. --global is not supported for
|
|
148
|
-
// vault import (the connector raw-archive path is tenant-local).
|
|
140
|
+
// Vault import is a FOLDER importer that dispatches apart from the single-file slot below; it writes through tenant-scoped api calls,
|
|
141
|
+
// so the tenant is resolved and passed through. --global is unsupported (the connector raw-archive path is tenant-local).
|
|
149
142
|
if (flags['vault'])
|
|
150
|
-
return importVaultFolder(hippoRoot, flags, importOptions, useGlobal, dryRun);
|
|
143
|
+
return importVaultFolder(hippoRoot, tenantId, flags, importOptions, useGlobal, dryRun);
|
|
151
144
|
importFromFile(targetRoot, args, flags, { importOptions, useGlobal, dryRun });
|
|
152
145
|
}
|
|
153
146
|
// Determine which importer to use based on flag
|
|
@@ -172,19 +165,15 @@ function importFromFile(targetRoot, args, flags, options) {
|
|
|
172
165
|
const { filePath, importer, importerName } = pickImporter(args, flags);
|
|
173
166
|
if (!filePath || !importer) {
|
|
174
167
|
printError('Usage: hippo import <--chatgpt|--claude|--cursor|--file|--markdown|--vault> <path>, or hippo import --agents [--dry-run]');
|
|
175
|
-
|
|
168
|
+
throw new CliExit(1);
|
|
176
169
|
}
|
|
177
170
|
if (!fs.existsSync(filePath)) {
|
|
178
171
|
printError(`File not found: ${filePath}`);
|
|
179
|
-
|
|
172
|
+
throw new CliExit(1);
|
|
180
173
|
}
|
|
181
174
|
const result = importer(filePath, importOptions);
|
|
182
|
-
// Batch
|
|
183
|
-
//
|
|
184
|
-
// floating promise is deliberate: libuv keeps the process alive until it
|
|
185
|
-
// settles, so it is not dropped on process exit; `hippo embed --global` (or
|
|
186
|
-
// a local `hippo embed`) is the backstop if it does get interrupted. Do not
|
|
187
|
-
// "fix" this by awaiting it, that would block the CLI on model load/backfill.
|
|
175
|
+
// Batch-embed newly imported rows in one pass (the importers' writeEntry sites don't embed). The floating promise is deliberate: libuv keeps the process
|
|
176
|
+
// alive until it settles; do not await it, that would block the CLI on model load. `hippo embed` is the backstop if interrupted.
|
|
188
177
|
if (!dryRun && result.imported >= 1) {
|
|
189
178
|
void embedAll(targetRoot).catch((err) => warnBackfillFailed(targetRoot, useGlobal ? 'hippo embed --global' : 'hippo embed', err));
|
|
190
179
|
}
|
|
@@ -227,10 +216,9 @@ function importAgentMemories(hippoRoot, useGlobal, dryRun) {
|
|
|
227
216
|
for (const warning of report.warnings)
|
|
228
217
|
printError(`hippo: agent memories: ${warning}`);
|
|
229
218
|
}
|
|
230
|
-
function importVaultFolder(hippoRoot, flags, importOptions, useGlobal, dryRun) {
|
|
219
|
+
function importVaultFolder(hippoRoot, tenantId, flags, importOptions, useGlobal, dryRun) {
|
|
231
220
|
const folderPath = String(flags['vault']);
|
|
232
221
|
checkVaultArgs(folderPath, flags, useGlobal);
|
|
233
|
-
const tenantId = resolveTenantId({});
|
|
234
222
|
const vaultOptions = {
|
|
235
223
|
...importOptions,
|
|
236
224
|
tenantId,
|
|
@@ -243,24 +231,23 @@ function importVaultFolder(hippoRoot, flags, importOptions, useGlobal, dryRun) {
|
|
|
243
231
|
function checkVaultArgs(folderPath, flags, useGlobal) {
|
|
244
232
|
if (!fs.existsSync(folderPath) || !fs.statSync(folderPath).isDirectory()) {
|
|
245
233
|
printError(`Vault folder not found (or not a directory): ${folderPath}`);
|
|
246
|
-
|
|
234
|
+
throw new CliExit(1);
|
|
247
235
|
}
|
|
248
236
|
if (useGlobal) {
|
|
249
237
|
printError('hippo import --vault does not support --global (raw rows are tenant-local).');
|
|
250
|
-
|
|
238
|
+
throw new CliExit(1);
|
|
251
239
|
}
|
|
252
|
-
if (
|
|
240
|
+
if (!isStringFlag(flags['name']) || !flags['name'].trim()) {
|
|
253
241
|
// --name keys the destructive source-deletion sync; a folder-basename default lets same-basename vaults clobber
|
|
254
242
|
// each other, and a valueless `--name` (boolean true) would silently import under vault:true:*.
|
|
255
243
|
printError('hippo import --vault requires --name <vault> (a non-empty identity key for source-deletion sync).');
|
|
256
|
-
|
|
244
|
+
throw new CliExit(1);
|
|
257
245
|
}
|
|
258
|
-
if (flags['scope'] !== undefined && (
|
|
259
|
-
// Same valueless-flag trap: a bare `--scope` must not become scope "true".
|
|
260
|
-
//
|
|
261
|
-
// is NOT treated as private by recall and importVault rejects it.
|
|
246
|
+
if (flags['scope'] !== undefined && (!isStringFlag(flags['scope']) || !flags['scope'].trim())) {
|
|
247
|
+
// Same valueless-flag trap: a bare `--scope` must not become scope "true". The example uses the source-prefixed private form,
|
|
248
|
+
// since a bare `private` scope is not treated as private by recall and importVault rejects it.
|
|
262
249
|
printError('hippo import --vault: --scope requires a value (e.g. --scope vault:private:notes).');
|
|
263
|
-
|
|
250
|
+
throw new CliExit(1);
|
|
264
251
|
}
|
|
265
252
|
}
|
|
266
253
|
function printVaultSummary(vaultResult, folderPath, hippoRoot, dryRun) {
|
|
@@ -274,27 +261,20 @@ function printVaultSummary(vaultResult, folderPath, hippoRoot, dryRun) {
|
|
|
274
261
|
warnRedacted(vaultResult.redacted);
|
|
275
262
|
console.log(` ${dryRun ? 'Would archive: ' : 'Archived (removed): '}${vaultResult.archived ?? 0}`);
|
|
276
263
|
console.log(` Store: ${hippoRoot}`);
|
|
277
|
-
// Batch producer, same contract as the single-file import above: vault rows
|
|
278
|
-
//
|
|
279
|
-
// Floating promise is deliberate; see the comment at the single-file site.
|
|
264
|
+
// Batch producer, same contract as the single-file import above: vault rows write through api.remember (which never embeds), so backfill them here.
|
|
265
|
+
// The floating promise is deliberate; see the single-file site.
|
|
280
266
|
if (!dryRun && vaultResult.imported >= 1) {
|
|
281
267
|
void embedAll(hippoRoot).catch((err) => warnBackfillFailed(hippoRoot, 'hippo embed', err));
|
|
282
268
|
}
|
|
283
269
|
}
|
|
284
|
-
// ---------------------------------------------------------------------------
|
|
285
270
|
// Promote command
|
|
286
|
-
|
|
287
|
-
function cmdPromote(hippoRoot, id) {
|
|
271
|
+
function cmdPromote(hippoRoot, tenantId, id) {
|
|
288
272
|
requireInit(hippoRoot);
|
|
289
273
|
if (!id) {
|
|
290
274
|
printError('Usage: hippo promote <id>');
|
|
291
|
-
|
|
275
|
+
throw new CliExit(1);
|
|
292
276
|
}
|
|
293
|
-
const ctx =
|
|
294
|
-
hippoRoot,
|
|
295
|
-
tenantId: resolveTenantId({}),
|
|
296
|
-
actor: api.adminActor('cli'),
|
|
297
|
-
};
|
|
277
|
+
const ctx = cliApiContext(hippoRoot, tenantId);
|
|
298
278
|
try {
|
|
299
279
|
const result = api.promote(ctx, id);
|
|
300
280
|
console.log(`Promoted ${id} to global store as ${result.globalId}`);
|
|
@@ -302,13 +282,11 @@ function cmdPromote(hippoRoot, id) {
|
|
|
302
282
|
}
|
|
303
283
|
catch (err) {
|
|
304
284
|
printError(`Failed to promote: ${errorMessage(err)}`);
|
|
305
|
-
|
|
285
|
+
throw new CliExit(1);
|
|
306
286
|
}
|
|
307
287
|
}
|
|
308
|
-
// ---------------------------------------------------------------------------
|
|
309
288
|
// Sync command
|
|
310
|
-
|
|
311
|
-
export function cmdSync(hippoRoot, flags = {}) {
|
|
289
|
+
export function handleSync({ hippoRoot, flags }) {
|
|
312
290
|
requireInit(hippoRoot);
|
|
313
291
|
const globalRoot = getGlobalRoot();
|
|
314
292
|
if (!isInitialized(globalRoot)) {
|
|
@@ -320,15 +298,15 @@ export function cmdSync(hippoRoot, flags = {}) {
|
|
|
320
298
|
const count = syncGlobalToLocal(hippoRoot, globalRoot, { includeCrossProject });
|
|
321
299
|
console.log(`Synced ${count} global memories into local project.${includeCrossProject ? '' : ' (other-project rows skipped; use --cross-project to include them)'}`);
|
|
322
300
|
}
|
|
323
|
-
export async function handleWatch({ hippoRoot, args }) {
|
|
301
|
+
export async function handleWatch({ hippoRoot, tenantId, args }) {
|
|
324
302
|
const watchCmd = args.join(' ').trim();
|
|
325
|
-
await cmdWatch(watchCmd, hippoRoot);
|
|
303
|
+
await cmdWatch(watchCmd, hippoRoot, tenantId);
|
|
326
304
|
}
|
|
327
|
-
export async function handlePromote({ hippoRoot, args }) {
|
|
305
|
+
export async function handlePromote({ hippoRoot, tenantId, args }) {
|
|
328
306
|
const id = args[0];
|
|
329
307
|
if (!id) {
|
|
330
308
|
printError('Please provide a memory ID.');
|
|
331
|
-
|
|
309
|
+
throw new CliExit(1);
|
|
332
310
|
}
|
|
333
311
|
const promoted = await runViaServerIfAvailable(hippoRoot, async (info, apiKey) => {
|
|
334
312
|
try {
|
|
@@ -337,21 +315,21 @@ export async function handlePromote({ hippoRoot, args }) {
|
|
|
337
315
|
}
|
|
338
316
|
catch (err) {
|
|
339
317
|
printError(`Failed to promote: ${errorMessage(err)}`);
|
|
340
|
-
|
|
318
|
+
throw new CliExit(1);
|
|
341
319
|
}
|
|
342
320
|
});
|
|
343
321
|
if (promoted)
|
|
344
322
|
return;
|
|
345
|
-
cmdPromote(hippoRoot, id);
|
|
323
|
+
cmdPromote(hippoRoot, tenantId, id);
|
|
346
324
|
}
|
|
347
|
-
export function handleShare({ hippoRoot, args, flags }) {
|
|
325
|
+
export async function handleShare({ hippoRoot, tenantId, args, flags }) {
|
|
348
326
|
const shareId = args[0];
|
|
349
327
|
if (shareId === '--auto' || flags['auto']) {
|
|
350
328
|
// Auto-share mode
|
|
351
329
|
requireInit(hippoRoot);
|
|
352
330
|
const minScore = parseFloat(String(flags['min-score'] ?? '0.6'));
|
|
353
331
|
const dryRun = boolFlag(flags, 'dry-run');
|
|
354
|
-
const results = autoShare(hippoRoot, { minScore, dryRun, tenantId
|
|
332
|
+
const results = autoShare(hippoRoot, { minScore, dryRun, tenantId });
|
|
355
333
|
if (results.length === 0) {
|
|
356
334
|
console.log('No memories meet the sharing threshold.');
|
|
357
335
|
}
|
|
@@ -372,14 +350,13 @@ export function handleShare({ hippoRoot, args, flags }) {
|
|
|
372
350
|
else if (shareId) {
|
|
373
351
|
requireInit(hippoRoot);
|
|
374
352
|
const force = boolFlag(flags, 'force');
|
|
375
|
-
const tenantId = resolveTenantId({});
|
|
376
353
|
const result = shareMemory(hippoRoot, shareId, { force, tenantId });
|
|
377
354
|
if (result) {
|
|
378
355
|
console.log(`Shared [${result.id}] to global store.`);
|
|
379
356
|
console.log(` Source: ${result.source}`);
|
|
380
357
|
}
|
|
381
358
|
else {
|
|
382
|
-
const entry =
|
|
359
|
+
const entry = await getMemory(cliApiContext(hippoRoot, tenantId), shareId);
|
|
383
360
|
if (entry) {
|
|
384
361
|
const score = transferScore(entry);
|
|
385
362
|
console.log(`Transfer score too low (${fmt(score)}). This memory looks project-specific.`);
|
|
@@ -387,19 +364,19 @@ export function handleShare({ hippoRoot, args, flags }) {
|
|
|
387
364
|
}
|
|
388
365
|
else {
|
|
389
366
|
printError(`Memory not found: ${shareId}`);
|
|
390
|
-
|
|
367
|
+
throw new CliExit(1);
|
|
391
368
|
}
|
|
392
369
|
}
|
|
393
370
|
}
|
|
394
371
|
else {
|
|
395
372
|
printError('Usage: hippo share <memory_id> [--force] or hippo share --auto [--dry-run]');
|
|
396
|
-
|
|
373
|
+
throw new CliExit(1);
|
|
397
374
|
}
|
|
398
375
|
}
|
|
399
|
-
export function handlePeers({ flags }) {
|
|
376
|
+
export function handlePeers({ tenantId, flags }) {
|
|
400
377
|
// Tenant-scoped by default; --all-tenants gives the host-wide view for cross-tenant peer discovery.
|
|
401
378
|
const allTenants = flagIsTrue(flags, 'all-tenants');
|
|
402
|
-
const tenantScope = allTenants ? undefined :
|
|
379
|
+
const tenantScope = allTenants ? undefined : tenantId;
|
|
403
380
|
const peers = listPeers(undefined, tenantScope);
|
|
404
381
|
if (peers.length === 0) {
|
|
405
382
|
console.log('No peers found. Share memories with: hippo share <id>');
|
|
@@ -412,11 +389,11 @@ export function handlePeers({ flags }) {
|
|
|
412
389
|
}
|
|
413
390
|
}
|
|
414
391
|
}
|
|
415
|
-
export function handleExport({ hippoRoot, args, flags }) {
|
|
392
|
+
export function handleExport({ hippoRoot, tenantId, args, flags }) {
|
|
416
393
|
requireInit(hippoRoot);
|
|
417
|
-
const format = (flags['format'] || 'json');
|
|
394
|
+
const format = String(flags['format'] || 'json');
|
|
418
395
|
const outputPath = args[0] || null;
|
|
419
|
-
const entries = loadAllEntries(hippoRoot,
|
|
396
|
+
const entries = loadAllEntries(hippoRoot, tenantId);
|
|
420
397
|
let output;
|
|
421
398
|
if (format === 'markdown' || format === 'md') {
|
|
422
399
|
output = entries.map(e => {
|
package/dist/cli/usage.js
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
import { TAIL_MAX_LINES } from '../support-bundle.js';
|
|
3
3
|
import { DEFAULT_LOCAL_BUMP, DEFAULT_RECALL_BUDGET } from '../core/search-types.js';
|
|
4
4
|
import { DEFAULT_ASSEMBLE_BUDGET } from '../api/assemble.js';
|
|
5
|
+
import { DEFAULT_SERVER_HOST, DEFAULT_SERVER_PORT } from '../server/defaults.js';
|
|
5
6
|
export function printAuditPruneUsage() {
|
|
6
7
|
console.log('hippo audit prune --older-than <Nd> [--dry-run] [--tenant <t>]');
|
|
7
8
|
console.log(' --older-than <Nd> Delete audit_log rows with ts older than N days (e.g. 90d).');
|
|
@@ -165,7 +166,7 @@ export const VERB_USAGE = {
|
|
|
165
166
|
the goal tag get a 1.5x score boost and results are
|
|
166
167
|
re-sorted. Default off. RESEARCH.md §PFC.dlPFC.
|
|
167
168
|
--session-id <id> Session identifier for dlPFC goal-stack boost.
|
|
168
|
-
Defaults to
|
|
169
|
+
Defaults to $HIPPO_SESSION_ID. When set and the
|
|
169
170
|
(tenant, session) has active goals (see
|
|
170
171
|
'hippo goal push'), recall auto-boosts memories
|
|
171
172
|
whose tags match an active goal name. Boost stacks
|
|
@@ -291,7 +292,9 @@ export const VERB_USAGE = {
|
|
|
291
292
|
auth <sub> Manage API keys (A5 stub auth)
|
|
292
293
|
auth create Mint a new API key (plaintext shown ONCE)
|
|
293
294
|
--label <s> Optional human label
|
|
294
|
-
--role <r> admin | member (default:
|
|
295
|
+
--role <r> admin | member (default: member; member blocked from /v1/sleep)
|
|
296
|
+
--ttl-days <n> Days until the key expires (default: 90, at most 3650)
|
|
297
|
+
--no-expiry Mint a key that never expires
|
|
295
298
|
--tenant <id> Override tenant (defaults to HIPPO_TENANT)
|
|
296
299
|
--json Output as JSON
|
|
297
300
|
--global Operate on the global store
|
|
@@ -662,10 +665,13 @@ export const VERB_USAGE = {
|
|
|
662
665
|
mcp Start MCP server (stdio transport)`],
|
|
663
666
|
serve: [`
|
|
664
667
|
serve Start the HTTP API server for this store (Ctrl+C stops it)
|
|
665
|
-
--port <n> Port to serve on (default: $HIPPO_PORT or
|
|
666
|
-
--host <host> Address to bind (default:
|
|
668
|
+
--port <n> Port to serve on (default: $HIPPO_PORT or ${DEFAULT_SERVER_PORT})
|
|
669
|
+
--host <host> Address to bind (default: ${DEFAULT_SERVER_HOST})
|
|
667
670
|
--tls-cert <file> PEM certificate; serve HTTPS only (or $HIPPO_TLS_CERT)
|
|
668
|
-
--tls-key <file> PEM private key for it; give both (or $HIPPO_TLS_KEY)
|
|
671
|
+
--tls-key <file> PEM private key for it; give both (or $HIPPO_TLS_KEY)
|
|
672
|
+
Every request needs an API key (hippo auth create).
|
|
673
|
+
$HIPPO_ALLOW_KEYLESS_LOCAL=1 lets requests from this machine
|
|
674
|
+
in without one; $HIPPO_REQUIRE_AUTH=1 wins over it.`],
|
|
669
675
|
invalidate: [`
|
|
670
676
|
invalidate "<pattern>" Actively weaken memories matching an old pattern
|
|
671
677
|
(content overlap, or a tag EXACTLY equal to the
|