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/curate.js
CHANGED
|
@@ -1,39 +1,37 @@
|
|
|
1
1
|
// Verbs that weaken, suppress or retire memories: outcome, forget, conflicts, reject, dormant, quarantine, invalidate.
|
|
2
2
|
import * as path from 'path';
|
|
3
|
-
import { readEntry } from '../store/entry-reads.js';
|
|
4
3
|
import { listMemoryConflicts, resolveConflict } from '../store/conflicts.js';
|
|
5
4
|
import { rejectValue, unrejectValue, listRejectionsForTenant } from '../trust/reject-flow.js';
|
|
6
5
|
import { RejectedValueError } from '../store/rejection.js';
|
|
7
6
|
import { loadConfig } from '../core/config.js';
|
|
7
|
+
import { RawAppendOnlyError } from '../core/raw-append-only.js';
|
|
8
8
|
import { isGitRepo } from '../learn/autolearn.js';
|
|
9
9
|
import { invalidateMatching } from '../learn/invalidation.js';
|
|
10
10
|
import * as api from '../api/index.js';
|
|
11
|
+
import { getMemory } from '../api/memories.js';
|
|
11
12
|
import * as client from './client.js';
|
|
12
|
-
import {
|
|
13
|
+
import { cliApiContext } from './api-context.js';
|
|
13
14
|
import { printError } from './output.js';
|
|
14
|
-
import { parseCountFlag, boolFlag, flagIsTrue, stringFlag } from './flag-values.js';
|
|
15
|
+
import { parseCountFlag, boolFlag, flagIsTrue, nonEmptyStringFlag, stringFlag } from './flag-values.js';
|
|
15
16
|
import { requireInit, runChurnStaleForRepo, runViaServerIfAvailable, resolveAuthRoot } from './shared.js';
|
|
16
17
|
import { fmt } from './print.js';
|
|
17
18
|
import { errorMessage } from '../util/log.js';
|
|
18
19
|
import { DIGEST_DISPLAY_CHARS, CONTENT_PREVIEW_CHARS, DATE_PREFIX_CHARS } from '../util/token-text.js';
|
|
20
|
+
import { CliExit } from './exit.js';
|
|
19
21
|
const CONFLICT_PREVIEW_CHARS = 120;
|
|
20
22
|
const REJECTED_DIGEST_LIST_CHARS = 16;
|
|
21
23
|
const DORMANT_PREVIEW_CHARS = 100;
|
|
22
24
|
const STRENGTH_DECIMALS = 3;
|
|
23
|
-
export function
|
|
25
|
+
export function handleOutcome({ hippoRoot, tenantId, flags }) {
|
|
24
26
|
requireInit(hippoRoot);
|
|
25
27
|
const good = boolFlag(flags, 'good');
|
|
26
28
|
const bad = boolFlag(flags, 'bad');
|
|
27
29
|
if (!good && !bad) {
|
|
28
30
|
printError('Specify --good or --bad');
|
|
29
|
-
|
|
31
|
+
throw new CliExit(1);
|
|
30
32
|
}
|
|
31
33
|
// Through api.outcome so every CLI outcome writes one audit_log row per id, as the MCP path does.
|
|
32
|
-
const ctx =
|
|
33
|
-
hippoRoot,
|
|
34
|
-
tenantId: resolveTenantId({}),
|
|
35
|
-
actor: api.adminActor('cli'),
|
|
36
|
-
};
|
|
34
|
+
const ctx = cliApiContext(hippoRoot, tenantId);
|
|
37
35
|
const specificId = flags['id'] ? String(flags['id']) : null;
|
|
38
36
|
let updated;
|
|
39
37
|
if (specificId) {
|
|
@@ -51,16 +49,11 @@ export function cmdOutcome(hippoRoot, flags) {
|
|
|
51
49
|
}
|
|
52
50
|
// Shared between the forget dispatch and cmdForget so the message can't drift.
|
|
53
51
|
const ARCHIVE_REASON_REQUIRED = 'hippo forget --archive requires --reason "<why>" (recorded on the archive).';
|
|
54
|
-
function cmdForget(hippoRoot, id, flags) {
|
|
52
|
+
function cmdForget(hippoRoot, tenantId, id, flags) {
|
|
55
53
|
requireInit(hippoRoot);
|
|
56
|
-
const ctx =
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
actor: api.adminActor('cli'),
|
|
60
|
-
};
|
|
61
|
-
// Raw memories (Slack / GitHub connector ingestion) are append-only: a
|
|
62
|
-
// BEFORE-DELETE trigger aborts any delete. archiveRaw is the sanctioned
|
|
63
|
-
// removal path; it records ctx.actor as the archiver for provenance.
|
|
54
|
+
const ctx = cliApiContext(hippoRoot, tenantId);
|
|
55
|
+
// Raw memories (connector ingestion) are append-only: a BEFORE-DELETE trigger aborts any delete,
|
|
56
|
+
// so archiveRaw is the sanctioned removal path and records ctx.actor as the archiver.
|
|
64
57
|
if (flagIsTrue(flags, 'archive')) {
|
|
65
58
|
archiveForgottenRaw(ctx, id, stringFlag(flags, 'reason') ?? null);
|
|
66
59
|
return;
|
|
@@ -70,14 +63,14 @@ function cmdForget(hippoRoot, id, flags) {
|
|
|
70
63
|
console.log(`Forgot ${id}`);
|
|
71
64
|
}
|
|
72
65
|
catch (err) {
|
|
73
|
-
reportForgetFailure(ctx, id,
|
|
74
|
-
|
|
66
|
+
reportForgetFailure(ctx, id, err);
|
|
67
|
+
throw new CliExit(1);
|
|
75
68
|
}
|
|
76
69
|
}
|
|
77
70
|
function archiveForgottenRaw(ctx, id, reason) {
|
|
78
71
|
if (!reason) {
|
|
79
72
|
printError(ARCHIVE_REASON_REQUIRED);
|
|
80
|
-
|
|
73
|
+
throw new CliExit(1);
|
|
81
74
|
}
|
|
82
75
|
try {
|
|
83
76
|
api.archiveRaw(ctx, id, reason);
|
|
@@ -85,11 +78,11 @@ function archiveForgottenRaw(ctx, id, reason) {
|
|
|
85
78
|
}
|
|
86
79
|
catch (err) {
|
|
87
80
|
printError(`Could not archive ${id}: ${errorMessage(err)}`);
|
|
88
|
-
|
|
81
|
+
throw new CliExit(1);
|
|
89
82
|
}
|
|
90
83
|
}
|
|
91
|
-
function reportForgetFailure(ctx, id,
|
|
92
|
-
if (
|
|
84
|
+
function reportForgetFailure(ctx, id, cause) {
|
|
85
|
+
if (cause instanceof RawAppendOnlyError) {
|
|
93
86
|
// The delete was refused by the append-only trigger — this is a raw
|
|
94
87
|
// memory, not a missing one. Point the user at the archive path.
|
|
95
88
|
printError(rawForgetRefusal(id));
|
|
@@ -108,25 +101,25 @@ function rawForgetRefusal(id) {
|
|
|
108
101
|
return `Cannot forget ${id}: it is a raw, append-only memory. Archive it instead: hippo forget ${id} --archive --reason "<why>"`;
|
|
109
102
|
}
|
|
110
103
|
// Refuses exactly where the real run would, so "Would forget" is a promise, not a guess.
|
|
111
|
-
function previewForget(hippoRoot, id, archive) {
|
|
104
|
+
async function previewForget(hippoRoot, tenantId, id, archive) {
|
|
112
105
|
requireInit(hippoRoot);
|
|
113
|
-
const entry =
|
|
106
|
+
const entry = await getMemory(cliApiContext(hippoRoot, tenantId), id);
|
|
114
107
|
if (!entry) {
|
|
115
108
|
printError(`Memory not found: ${id}`);
|
|
116
|
-
|
|
109
|
+
throw new CliExit(1);
|
|
117
110
|
}
|
|
118
111
|
if (!archive && entry.kind === 'raw') {
|
|
119
112
|
printError(rawForgetRefusal(id));
|
|
120
|
-
|
|
113
|
+
throw new CliExit(1);
|
|
121
114
|
}
|
|
122
115
|
if (archive && entry.kind !== 'raw') {
|
|
123
116
|
printError(`Could not archive ${id}: memory ${id} is not raw (kind=${entry.kind})`);
|
|
124
|
-
|
|
117
|
+
throw new CliExit(1);
|
|
125
118
|
}
|
|
126
119
|
const snippet = entry.content.length > CONTENT_PREVIEW_CHARS ? `${entry.content.slice(0, CONTENT_PREVIEW_CHARS)}...` : entry.content;
|
|
127
120
|
console.log(`Would ${archive ? 'archive' : 'forget'} ${id} (dry run, nothing changed): "${snippet}"`);
|
|
128
121
|
}
|
|
129
|
-
export function
|
|
122
|
+
export function handleConflicts({ hippoRoot, flags }) {
|
|
130
123
|
requireInit(hippoRoot);
|
|
131
124
|
const conflicts = listMemoryConflicts(hippoRoot, String(flags['status'] ?? 'open'));
|
|
132
125
|
if (flags['json']) {
|
|
@@ -146,19 +139,20 @@ export function cmdConflicts(hippoRoot, flags) {
|
|
|
146
139
|
}
|
|
147
140
|
}
|
|
148
141
|
/** Shown when --keep is missing, to help the user decide. */
|
|
149
|
-
function showConflictForResolve(hippoRoot, conflictId, tenantId) {
|
|
142
|
+
async function showConflictForResolve(hippoRoot, conflictId, tenantId) {
|
|
150
143
|
const conflicts = listMemoryConflicts(hippoRoot, 'open', tenantId);
|
|
151
144
|
const conflict = conflicts.find((c) => c.id === conflictId);
|
|
152
145
|
if (!conflict) {
|
|
153
146
|
printError(`Conflict ${conflictId} not found or already resolved.`);
|
|
154
|
-
|
|
147
|
+
throw new CliExit(1);
|
|
155
148
|
}
|
|
156
149
|
console.log(`Conflict ${conflictId}:`);
|
|
157
150
|
console.log(` ${conflict.memory_a_id} <-> ${conflict.memory_b_id}`);
|
|
158
151
|
console.log(` Reason: ${conflict.reason}`);
|
|
159
152
|
console.log('');
|
|
160
|
-
const
|
|
161
|
-
const
|
|
153
|
+
const ctx = cliApiContext(hippoRoot, tenantId);
|
|
154
|
+
const entryA = await getMemory(ctx, conflict.memory_a_id);
|
|
155
|
+
const entryB = await getMemory(ctx, conflict.memory_b_id);
|
|
162
156
|
if (entryA) {
|
|
163
157
|
console.log(` [A] ${conflict.memory_a_id}:`);
|
|
164
158
|
console.log(` ${entryA.content.slice(0, CONFLICT_PREVIEW_CHARS)}${entryA.content.length > CONFLICT_PREVIEW_CHARS ? '...' : ''}`);
|
|
@@ -170,19 +164,18 @@ function showConflictForResolve(hippoRoot, conflictId, tenantId) {
|
|
|
170
164
|
console.log('');
|
|
171
165
|
console.log(`Resolve with: hippo resolve ${conflictId} --keep <memory_id> [--forget] [--reject-loser [--reason "<why>"]]`);
|
|
172
166
|
}
|
|
173
|
-
export function
|
|
167
|
+
export async function handleResolve({ hippoRoot, tenantId, args, flags }) {
|
|
174
168
|
requireInit(hippoRoot);
|
|
175
169
|
const rawId = args[0] ?? '';
|
|
176
170
|
// Accept "42" or "conflict_42"
|
|
177
171
|
const conflictId = parseInt(rawId.replace(/^conflict_/, ''), 10);
|
|
178
172
|
if (isNaN(conflictId)) {
|
|
179
173
|
printError('Usage: hippo resolve <conflict_id> --keep <memory_id> [--forget]');
|
|
180
|
-
|
|
174
|
+
throw new CliExit(1);
|
|
181
175
|
}
|
|
182
|
-
const tenantId = resolveTenantId({});
|
|
183
176
|
const keepId = String(flags['keep'] ?? '').trim();
|
|
184
177
|
if (!keepId) {
|
|
185
|
-
showConflictForResolve(hippoRoot, conflictId, tenantId);
|
|
178
|
+
await showConflictForResolve(hippoRoot, conflictId, tenantId);
|
|
186
179
|
return;
|
|
187
180
|
}
|
|
188
181
|
const forgetLoser = boolFlag(flags, 'forget');
|
|
@@ -196,7 +189,7 @@ export function cmdResolve(hippoRoot, args, flags) {
|
|
|
196
189
|
});
|
|
197
190
|
if (!result) {
|
|
198
191
|
printError(`Could not resolve conflict ${conflictId}. Check the ID and --keep value.`);
|
|
199
|
-
|
|
192
|
+
throw new CliExit(1);
|
|
200
193
|
}
|
|
201
194
|
const action = rejectLoser
|
|
202
195
|
? 'rejected (tombstoned) and removed'
|
|
@@ -205,31 +198,28 @@ export function cmdResolve(hippoRoot, args, flags) {
|
|
|
205
198
|
: 'weakened (half-life halved)';
|
|
206
199
|
console.log(`Resolved conflict ${conflictId}: kept ${keepId}, ${action} ${result.loserId}`);
|
|
207
200
|
}
|
|
208
|
-
// ---------------------------------------------------------------------------
|
|
209
201
|
// reject / rejections / unreject
|
|
210
|
-
|
|
211
|
-
export function cmdReject(hippoRoot, args, flags) {
|
|
202
|
+
export function handleReject({ hippoRoot, tenantId, args, flags }) {
|
|
212
203
|
// Store resolution mirrors `hippo remember`: --global writes to the
|
|
213
204
|
// global store, otherwise the local store (requireInit'd via resolveAuthRoot).
|
|
214
205
|
const root = resolveAuthRoot(hippoRoot, flags);
|
|
215
|
-
const tenantId = resolveTenantId({});
|
|
216
206
|
// --reason is REQUIRED: the tombstone stores no content, so reason is its only human-readable identity.
|
|
217
207
|
const reason = (stringFlag(flags, 'reason') ?? '').trim();
|
|
218
208
|
if (!reason) {
|
|
219
209
|
printError('hippo reject requires --reason "<why>" (the tombstone stores no content; reason is its only identity).');
|
|
220
|
-
|
|
210
|
+
throw new CliExit(1);
|
|
221
211
|
}
|
|
222
212
|
const valueFlag = stringFlag(flags, 'value');
|
|
223
213
|
const memoryId = args[0];
|
|
224
214
|
if (!memoryId && valueFlag === undefined) {
|
|
225
215
|
printError('Usage: hippo reject <memory-id> --reason "<why>"');
|
|
226
216
|
printError(' or: hippo reject --value "<text>" --reason "<why>"');
|
|
227
|
-
|
|
217
|
+
throw new CliExit(1);
|
|
228
218
|
}
|
|
229
219
|
if (memoryId && valueFlag !== undefined) {
|
|
230
220
|
// Ambiguous ask: silently preferring one form would ignore the other without feedback.
|
|
231
221
|
printError('hippo reject takes EITHER a memory id OR --value, not both.');
|
|
232
|
-
|
|
222
|
+
throw new CliExit(1);
|
|
233
223
|
}
|
|
234
224
|
try {
|
|
235
225
|
const result = rejectValue({
|
|
@@ -244,7 +234,7 @@ export function cmdReject(hippoRoot, args, flags) {
|
|
|
244
234
|
}
|
|
245
235
|
catch (err) {
|
|
246
236
|
printError(`Could not reject: ${errorMessage(err)}`);
|
|
247
|
-
|
|
237
|
+
throw new CliExit(1);
|
|
248
238
|
}
|
|
249
239
|
}
|
|
250
240
|
function printRejected(result, reason) {
|
|
@@ -265,9 +255,8 @@ function printRejected(result, reason) {
|
|
|
265
255
|
console.log(' No live rows matched (pre-emptive tombstone).');
|
|
266
256
|
}
|
|
267
257
|
}
|
|
268
|
-
export function
|
|
258
|
+
export function handleRejections({ hippoRoot, tenantId, flags }) {
|
|
269
259
|
const root = resolveAuthRoot(hippoRoot, flags);
|
|
270
|
-
const tenantId = resolveTenantId({});
|
|
271
260
|
const rows = listRejectionsForTenant(root, tenantId);
|
|
272
261
|
if (flags['json']) {
|
|
273
262
|
console.log(JSON.stringify({ rejections: rows }, null, 2));
|
|
@@ -290,41 +279,32 @@ export function cmdRejections(hippoRoot, flags) {
|
|
|
290
279
|
console.log('');
|
|
291
280
|
}
|
|
292
281
|
}
|
|
293
|
-
export function
|
|
282
|
+
export function handleUnreject({ hippoRoot, tenantId, args, flags }) {
|
|
294
283
|
const root = resolveAuthRoot(hippoRoot, flags);
|
|
295
|
-
const tenantId = resolveTenantId({});
|
|
296
284
|
const digestOrPrefix = (args[0] ?? '').trim();
|
|
297
285
|
if (!digestOrPrefix) {
|
|
298
286
|
printError('Usage: hippo unreject <digest-or-prefix>');
|
|
299
|
-
|
|
287
|
+
throw new CliExit(1);
|
|
300
288
|
}
|
|
301
289
|
const outcome = unrejectValue(root, tenantId, digestOrPrefix, 'cli');
|
|
302
290
|
if (outcome.status === 'not_found') {
|
|
303
291
|
printError(`No rejected value matches "${digestOrPrefix}". Run \`hippo rejections\` to list tombstones.`);
|
|
304
|
-
|
|
292
|
+
throw new CliExit(1);
|
|
305
293
|
}
|
|
306
294
|
if (outcome.status === 'ambiguous') {
|
|
307
295
|
printError(`"${digestOrPrefix}" matches ${outcome.candidates.length} tombstones. Use a longer prefix:`);
|
|
308
296
|
for (const c of outcome.candidates) {
|
|
309
297
|
printError(` ${c.digest.slice(0, REJECTED_DIGEST_LIST_CHARS)}... ${c.reason ?? 'none given'}`);
|
|
310
298
|
}
|
|
311
|
-
|
|
299
|
+
throw new CliExit(1);
|
|
312
300
|
}
|
|
313
301
|
console.log(`Unrejected [${outcome.digest.slice(0, DIGEST_DISPLAY_CHARS)}...] (was: ${outcome.reason ?? 'none given'})`);
|
|
314
302
|
}
|
|
315
|
-
/**
|
|
316
|
-
* `
|
|
317
|
-
|
|
318
|
-
* Dormant memories are what sleep keeps instead of deleting (on by default;
|
|
319
|
-
* `"dormant": { "enabled": false }` in .hippo/config.json deletes instead).
|
|
320
|
-
*/
|
|
321
|
-
export function cmdDormant(hippoRoot, args, flags) {
|
|
303
|
+
/** `hippo dormant [list|restore <id>|forget <id>]`: dormant memories are what sleep keeps instead of deleting
|
|
304
|
+
* (on by default; `"dormant": { "enabled": false }` in .hippo/config.json deletes instead). */
|
|
305
|
+
export function handleDormant({ hippoRoot, tenantId, args, flags }) {
|
|
322
306
|
const root = resolveAuthRoot(hippoRoot, flags);
|
|
323
|
-
const ctx =
|
|
324
|
-
hippoRoot: root,
|
|
325
|
-
tenantId: resolveTenantId({}),
|
|
326
|
-
actor: api.adminActor('cli'),
|
|
327
|
-
};
|
|
307
|
+
const ctx = cliApiContext(root, tenantId);
|
|
328
308
|
const sub = args[0];
|
|
329
309
|
if (sub === 'restore' || sub === 'forget') {
|
|
330
310
|
changeDormant(ctx, sub, (args[1] ?? '').trim());
|
|
@@ -345,7 +325,7 @@ export function cmdDormant(hippoRoot, args, flags) {
|
|
|
345
325
|
function changeDormant(ctx, sub, id) {
|
|
346
326
|
if (!id) {
|
|
347
327
|
printError(`Usage: hippo dormant ${sub} <id>`);
|
|
348
|
-
|
|
328
|
+
throw new CliExit(1);
|
|
349
329
|
}
|
|
350
330
|
try {
|
|
351
331
|
if (sub === 'restore') {
|
|
@@ -364,7 +344,7 @@ function changeDormant(ctx, sub, id) {
|
|
|
364
344
|
else {
|
|
365
345
|
printError(`Could not ${sub} ${id}: ${errorMessage(err)}`);
|
|
366
346
|
}
|
|
367
|
-
|
|
347
|
+
throw new CliExit(1);
|
|
368
348
|
}
|
|
369
349
|
}
|
|
370
350
|
function printDormantRows(rows, hasQuery, root) {
|
|
@@ -386,13 +366,9 @@ function printDormantRows(rows, hasQuery, root) {
|
|
|
386
366
|
console.log('Bring one back: hippo dormant restore <id> Delete for good: hippo dormant forget <id>');
|
|
387
367
|
}
|
|
388
368
|
/** `hippo quarantine [list] [--all] [--json] [--global]`, `quarantine approve <id>`, `quarantine reject <id>` (poisoning defence). */
|
|
389
|
-
export async function
|
|
369
|
+
export async function handleQuarantine({ hippoRoot, tenantId, args, flags }) {
|
|
390
370
|
const root = resolveAuthRoot(hippoRoot, flags);
|
|
391
|
-
const ctx =
|
|
392
|
-
hippoRoot: root,
|
|
393
|
-
tenantId: resolveTenantId({}),
|
|
394
|
-
actor: api.adminActor('cli'),
|
|
395
|
-
};
|
|
371
|
+
const ctx = cliApiContext(root, tenantId);
|
|
396
372
|
const sub = args[0];
|
|
397
373
|
if (sub === 'approve' || sub === 'reject') {
|
|
398
374
|
await decideQuarantined(ctx, sub, (args[1] ?? '').trim());
|
|
@@ -413,7 +389,7 @@ export async function cmdQuarantine(hippoRoot, args, flags) {
|
|
|
413
389
|
async function decideQuarantined(ctx, sub, id) {
|
|
414
390
|
if (!id) {
|
|
415
391
|
printError(`Usage: hippo quarantine ${sub} <id>`);
|
|
416
|
-
|
|
392
|
+
throw new CliExit(1);
|
|
417
393
|
}
|
|
418
394
|
try {
|
|
419
395
|
if (sub === 'approve') {
|
|
@@ -427,7 +403,7 @@ async function decideQuarantined(ctx, sub, id) {
|
|
|
427
403
|
}
|
|
428
404
|
catch (err) {
|
|
429
405
|
printError(`Could not ${sub} ${id}: ${errorMessage(err)}`);
|
|
430
|
-
|
|
406
|
+
throw new CliExit(1);
|
|
431
407
|
}
|
|
432
408
|
}
|
|
433
409
|
function printQuarantineRows(rows) {
|
|
@@ -440,11 +416,11 @@ function printQuarantineRows(rows) {
|
|
|
440
416
|
}
|
|
441
417
|
console.log('Approve: hippo quarantine approve <id> Reject: hippo quarantine reject <id>');
|
|
442
418
|
}
|
|
443
|
-
export async function handleForget({ hippoRoot, args, flags }) {
|
|
419
|
+
export async function handleForget({ hippoRoot, tenantId, args, flags }) {
|
|
444
420
|
const id = args[0];
|
|
445
421
|
if (!id) {
|
|
446
422
|
printError('Please provide a memory ID.');
|
|
447
|
-
|
|
423
|
+
throw new CliExit(1);
|
|
448
424
|
}
|
|
449
425
|
// Archive has its own HTTP route (POST /v1/memories/:id/archive); route
|
|
450
426
|
// both branches the same way the direct path does.
|
|
@@ -452,10 +428,10 @@ export async function handleForget({ hippoRoot, args, flags }) {
|
|
|
452
428
|
const reason = stringFlag(flags, 'reason') ?? null;
|
|
453
429
|
if (archive && !reason) {
|
|
454
430
|
printError(ARCHIVE_REASON_REQUIRED);
|
|
455
|
-
|
|
431
|
+
throw new CliExit(1);
|
|
456
432
|
}
|
|
457
433
|
if (flagIsTrue(flags, 'dry-run')) {
|
|
458
|
-
previewForget(hippoRoot, id, archive);
|
|
434
|
+
await previewForget(hippoRoot, tenantId, id, archive);
|
|
459
435
|
return;
|
|
460
436
|
}
|
|
461
437
|
const routed = await runViaServerIfAvailable(hippoRoot, async (info, apiKey) => {
|
|
@@ -472,26 +448,26 @@ export async function handleForget({ hippoRoot, args, flags }) {
|
|
|
472
448
|
catch (err) {
|
|
473
449
|
// A server that died after the health probe is the caller's transport
|
|
474
450
|
// fallback to handle, not an error to report to the user.
|
|
475
|
-
if (client.classifyTransportFailure(err) !== 'none')
|
|
451
|
+
if (err instanceof Error && client.classifyTransportFailure(err) !== 'none')
|
|
476
452
|
throw err;
|
|
477
453
|
const msg = errorMessage(err);
|
|
478
454
|
printError(archive ? `Could not archive ${id}: ${msg}` : msg);
|
|
479
|
-
|
|
455
|
+
throw new CliExit(1);
|
|
480
456
|
}
|
|
481
457
|
});
|
|
482
458
|
if (routed)
|
|
483
459
|
return;
|
|
484
|
-
cmdForget(hippoRoot, id, flags);
|
|
460
|
+
cmdForget(hippoRoot, tenantId, id, flags);
|
|
485
461
|
}
|
|
486
462
|
function invalidateChurn(hippoRoot, args, flags) {
|
|
487
463
|
if (args[0] || flags['id'] !== undefined) {
|
|
488
464
|
printError('Usage: hippo invalidate --churn [--dry-run]');
|
|
489
465
|
printError('--churn takes no pattern or --id.');
|
|
490
|
-
|
|
466
|
+
throw new CliExit(1);
|
|
491
467
|
}
|
|
492
468
|
if (!isGitRepo(process.cwd())) {
|
|
493
469
|
printError('hippo invalidate --churn must run inside a git repository.');
|
|
494
|
-
|
|
470
|
+
throw new CliExit(1);
|
|
495
471
|
}
|
|
496
472
|
const churnDryRun = flagIsTrue(flags, 'dry-run');
|
|
497
473
|
let churnFailed = false;
|
|
@@ -516,9 +492,9 @@ function invalidateChurn(hippoRoot, args, flags) {
|
|
|
516
492
|
}
|
|
517
493
|
}
|
|
518
494
|
if (churnFailed)
|
|
519
|
-
|
|
495
|
+
throw new CliExit(1);
|
|
520
496
|
}
|
|
521
|
-
export function handleInvalidate({ hippoRoot, args, flags }) {
|
|
497
|
+
export function handleInvalidate({ hippoRoot, tenantId, args, flags }) {
|
|
522
498
|
requireInit(hippoRoot);
|
|
523
499
|
if (flagIsTrue(flags, 'churn'))
|
|
524
500
|
return invalidateChurn(hippoRoot, args, flags);
|
|
@@ -527,7 +503,7 @@ export function handleInvalidate({ hippoRoot, args, flags }) {
|
|
|
527
503
|
// Value-less --id must never silently fall through to pattern mode
|
|
528
504
|
// (pattern mode writes broadly; an ignored --id reverses user intent).
|
|
529
505
|
printError('--id requires a memory id');
|
|
530
|
-
|
|
506
|
+
throw new CliExit(1);
|
|
531
507
|
}
|
|
532
508
|
const onlyId = stringFlag(flags, 'id');
|
|
533
509
|
const dryRun = flagIsTrue(flags, 'dry-run');
|
|
@@ -535,15 +511,15 @@ export function handleInvalidate({ hippoRoot, args, flags }) {
|
|
|
535
511
|
printError('Usage: hippo invalidate "<old pattern>" [--dry-run] [--reason "<why>"]');
|
|
536
512
|
printError(' hippo invalidate --id <memory-id> [--dry-run] [--reason "<why>"]');
|
|
537
513
|
printError('Pass a pattern OR --id, not both. Tag matching is EXACT: the full pattern must equal a tag.');
|
|
538
|
-
|
|
514
|
+
throw new CliExit(1);
|
|
539
515
|
}
|
|
540
|
-
const reason = (flags
|
|
516
|
+
const reason = nonEmptyStringFlag(flags, 'reason') ?? null;
|
|
541
517
|
const invTarget = {
|
|
542
518
|
from: target ?? `id:${onlyId}`,
|
|
543
519
|
to: reason,
|
|
544
520
|
type: 'migration',
|
|
545
521
|
};
|
|
546
|
-
const result = invalidateMatching(hippoRoot, invTarget,
|
|
522
|
+
const result = invalidateMatching(hippoRoot, invTarget, tenantId, { dryRun, onlyId });
|
|
547
523
|
const label = target ? `"${target}"` : `--id ${onlyId}`;
|
|
548
524
|
if (result.dryRun) {
|
|
549
525
|
if (result.invalidated === 0) {
|
package/dist/cli/dag.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { type
|
|
2
|
-
export declare function
|
|
3
|
-
export declare function handleDrill({ hippoRoot, args, flags }: CommandContext): Promise<void>;
|
|
4
|
-
export declare function handleAssemble({ hippoRoot, args, flags }: CommandContext): Promise<void>;
|
|
1
|
+
import { type CommandContext } from './flag-values.js';
|
|
2
|
+
export declare function handleDag({ hippoRoot, flags }: CommandContext): void;
|
|
3
|
+
export declare function handleDrill({ hippoRoot, tenantId, args, flags }: CommandContext): Promise<void>;
|
|
4
|
+
export declare function handleAssemble({ hippoRoot, tenantId, args, flags }: CommandContext): Promise<void>;
|
|
5
5
|
//# sourceMappingURL=dag.d.ts.map
|
package/dist/cli/dag.js
CHANGED
|
@@ -1,19 +1,19 @@
|
|
|
1
1
|
// DAG summary verbs: `hippo dag`, `hippo assemble` and `hippo drill`.
|
|
2
2
|
import { loadAllEntries } from '../store/entry-reads.js';
|
|
3
3
|
import * as api from '../api/index.js';
|
|
4
|
-
import { resolveTenantId } from '../store/tenant.js';
|
|
5
4
|
import { assembleCost, assembleHeading, drillCost, settleTokens } from '../api/context-render.js';
|
|
6
5
|
import { printError } from './output.js';
|
|
7
6
|
import { parseBudgetFlag, flagIsTrue, stringFlag, numberFlag } from './flag-values.js';
|
|
8
7
|
import { requireInit } from './shared.js';
|
|
9
8
|
import { captureConsole } from './print.js';
|
|
10
9
|
import { CONTENT_PREVIEW_CHARS } from '../util/token-text.js';
|
|
10
|
+
import { CliExit } from './exit.js';
|
|
11
11
|
const TREE_CHILD_PREVIEW_CHARS = 70;
|
|
12
12
|
const TREE_LEAF_PREVIEW_CHARS = 60;
|
|
13
13
|
const DAG_HEAD_CHARS = 120;
|
|
14
14
|
const DAG_SUMMARY_PREVIEW_CHARS = 200;
|
|
15
15
|
const DAG_CHILD_PREVIEW_CHARS = 100;
|
|
16
|
-
export function
|
|
16
|
+
export function handleDag({ hippoRoot, flags }) {
|
|
17
17
|
requireInit(hippoRoot);
|
|
18
18
|
const entries = loadAllEntries(hippoRoot);
|
|
19
19
|
const isStats = flagIsTrue(flags, 'stats');
|
|
@@ -86,7 +86,7 @@ function printDagTree(entries) {
|
|
|
86
86
|
}
|
|
87
87
|
}
|
|
88
88
|
}
|
|
89
|
-
async function cmdAssemble(hippoRoot, sessionId, flags) {
|
|
89
|
+
async function cmdAssemble(hippoRoot, tenantId, sessionId, flags) {
|
|
90
90
|
requireInit(hippoRoot);
|
|
91
91
|
// Absent stays undefined so the api default applies; the 0 fallback is unreachable.
|
|
92
92
|
const budget = flags['budget'] === undefined ? undefined : parseBudgetFlag(flags['budget'], 0);
|
|
@@ -95,16 +95,19 @@ async function cmdAssemble(hippoRoot, sessionId, flags) {
|
|
|
95
95
|
const scope = stringFlag(flags, 'scope') || undefined;
|
|
96
96
|
const ctx = {
|
|
97
97
|
hippoRoot,
|
|
98
|
-
tenantId
|
|
98
|
+
tenantId,
|
|
99
99
|
actor: api.adminActor('cli:assemble'),
|
|
100
100
|
};
|
|
101
|
-
const
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
101
|
+
const opts = {};
|
|
102
|
+
if (Number.isFinite(budget) && budget > 0)
|
|
103
|
+
opts.budget = budget;
|
|
104
|
+
if (Number.isFinite(freshTailCount) && freshTailCount >= 0)
|
|
105
|
+
opts.freshTailCount = freshTailCount;
|
|
106
|
+
opts.summarizeOlder = summarizeOlder;
|
|
107
|
+
if (scope !== undefined)
|
|
108
|
+
opts.scope = scope;
|
|
109
|
+
opts.cost = assembleCost(sessionId);
|
|
110
|
+
const r = await api.assemble(ctx, sessionId, opts);
|
|
108
111
|
if (flags['json']) {
|
|
109
112
|
console.log(JSON.stringify(r, null, 2));
|
|
110
113
|
return;
|
|
@@ -118,7 +121,7 @@ async function cmdAssemble(hippoRoot, sessionId, flags) {
|
|
|
118
121
|
}
|
|
119
122
|
})));
|
|
120
123
|
}
|
|
121
|
-
async function cmdDrillDown(hippoRoot, summaryId, flags) {
|
|
124
|
+
async function cmdDrillDown(hippoRoot, tenantId, summaryId, flags) {
|
|
122
125
|
requireInit(hippoRoot);
|
|
123
126
|
const limit = numberFlag(flags, 'limit');
|
|
124
127
|
// Absent stays undefined so the api default applies; the 0 fallback is unreachable.
|
|
@@ -129,21 +132,24 @@ async function cmdDrillDown(hippoRoot, summaryId, flags) {
|
|
|
129
132
|
if (rawDepth !== undefined) {
|
|
130
133
|
if (!Number.isInteger(rawDepth) || rawDepth < 1 || rawDepth > 10) {
|
|
131
134
|
printError(`--depth must be an integer between 1 and 10 (got ${flags['depth']})`);
|
|
132
|
-
|
|
135
|
+
throw new CliExit(2);
|
|
133
136
|
}
|
|
134
137
|
depth = rawDepth;
|
|
135
138
|
}
|
|
136
139
|
const ctx = {
|
|
137
140
|
hippoRoot,
|
|
138
|
-
tenantId
|
|
141
|
+
tenantId,
|
|
139
142
|
actor: api.adminActor('cli:drill'),
|
|
140
143
|
};
|
|
141
|
-
const
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
144
|
+
const opts = {};
|
|
145
|
+
if (Number.isFinite(limit) && limit > 0)
|
|
146
|
+
opts.limit = limit;
|
|
147
|
+
if (Number.isFinite(budget) && budget > 0)
|
|
148
|
+
opts.budget = budget;
|
|
149
|
+
if (depth !== undefined)
|
|
150
|
+
opts.depth = depth;
|
|
151
|
+
opts.cost = drillCost;
|
|
152
|
+
const r = await api.drillDown(ctx, summaryId, opts);
|
|
147
153
|
if ('failure' in r) {
|
|
148
154
|
// Only `not_drillable` is caller-actionable. `not_found` collapses cross-tenant, scope-blocked
|
|
149
155
|
// and missing on purpose: telling scope_blocked apart would leak that the row exists.
|
|
@@ -153,7 +159,7 @@ async function cmdDrillDown(hippoRoot, summaryId, flags) {
|
|
|
153
159
|
else {
|
|
154
160
|
printError(`No drillable summary at id=${summaryId}.`);
|
|
155
161
|
}
|
|
156
|
-
|
|
162
|
+
throw new CliExit(1);
|
|
157
163
|
}
|
|
158
164
|
if (flags['json']) {
|
|
159
165
|
console.log(JSON.stringify(r, null, 2));
|
|
@@ -166,20 +172,20 @@ async function cmdDrillDown(hippoRoot, summaryId, flags) {
|
|
|
166
172
|
console.log(` [L${c.dagLevel}] ${c.id} — ${c.content.slice(0, DAG_CHILD_PREVIEW_CHARS)}${c.content.length > DAG_CHILD_PREVIEW_CHARS ? '…' : ''}`);
|
|
167
173
|
}
|
|
168
174
|
}
|
|
169
|
-
export async function handleDrill({ hippoRoot, args, flags }) {
|
|
175
|
+
export async function handleDrill({ hippoRoot, tenantId, args, flags }) {
|
|
170
176
|
const summaryId = args[0];
|
|
171
177
|
if (!summaryId) {
|
|
172
178
|
printError('Usage: hippo drill <summary-id> [--limit N] [--budget N]');
|
|
173
|
-
|
|
179
|
+
throw new CliExit(1);
|
|
174
180
|
}
|
|
175
|
-
await cmdDrillDown(hippoRoot, summaryId, flags);
|
|
181
|
+
await cmdDrillDown(hippoRoot, tenantId, summaryId, flags);
|
|
176
182
|
}
|
|
177
|
-
export async function handleAssemble({ hippoRoot, args, flags }) {
|
|
183
|
+
export async function handleAssemble({ hippoRoot, tenantId, args, flags }) {
|
|
178
184
|
const sessionId = stringFlag(flags, 'session') ?? args[0];
|
|
179
185
|
if (!sessionId) {
|
|
180
186
|
printError('Usage: hippo assemble --session <id> [--budget N] [--fresh-tail N] [--no-summarize-older] [--json]');
|
|
181
|
-
|
|
187
|
+
throw new CliExit(1);
|
|
182
188
|
}
|
|
183
|
-
await cmdAssemble(hippoRoot, sessionId, flags);
|
|
189
|
+
await cmdAssemble(hippoRoot, tenantId, sessionId, flags);
|
|
184
190
|
}
|
|
185
191
|
//# sourceMappingURL=dag.js.map
|
package/dist/cli/decisions.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { type
|
|
2
|
-
export declare function
|
|
3
|
-
export declare function
|
|
4
|
-
export declare function
|
|
1
|
+
import { type CommandContext } from './flag-values.js';
|
|
2
|
+
export declare function handlePredict({ hippoRoot, tenantId, args, flags }: CommandContext): void;
|
|
3
|
+
export declare function handleDecide({ hippoRoot, tenantId, args, flags }: CommandContext): Promise<void>;
|
|
4
|
+
export declare function handleIncident({ hippoRoot, tenantId, args, flags }: CommandContext): void;
|
|
5
5
|
//# sourceMappingURL=decisions.d.ts.map
|