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/recall.js
CHANGED
|
@@ -1,35 +1,23 @@
|
|
|
1
1
|
// The `hippo recall` verb; main() loads it lazily from the command table.
|
|
2
2
|
import { envHippoSessionId } from '../util/env.js';
|
|
3
|
-
import {
|
|
4
|
-
import { isInitialized } from '../store/open.js';
|
|
5
|
-
import { loadIndex } from '../store/index-and-stats.js';
|
|
6
|
-
import { loadActiveTaskSnapshot, listSessionEvents } from '../store/sessions.js';
|
|
7
|
-
import { loadLatestHandoff } from '../store/handoffs.js';
|
|
8
|
-
import { passesScopeFilterForRecall } from '../store/recall-scope.js';
|
|
9
|
-
import { fitBudget } from '../search/finalize.js';
|
|
10
|
-
import { explainMatch } from '../search/explain.js';
|
|
3
|
+
import { Layer } from '../core/memory.js';
|
|
11
4
|
import { DEFAULT_RECALL_BUDGET } from '../core/search-types.js';
|
|
12
5
|
import { loadConfig } from '../core/config.js';
|
|
13
6
|
import { estimateTokens } from '../util/token-text.js';
|
|
14
7
|
import { dropHeldCopies } from '../util/same-text.js';
|
|
15
|
-
import { isGlobalStoreRoot } from '../core/project-identity.js';
|
|
16
|
-
import { detectScope } from '../sharing/scope.js';
|
|
17
|
-
import { getGlobalRoot } from '../sharing/shared.js';
|
|
18
8
|
import * as api from '../api/index.js';
|
|
19
9
|
import { detectAnchoring, hashQueryText, biasHintEnabled, snapshotRing } from '../api/recall-history.js';
|
|
20
|
-
import {
|
|
10
|
+
import { sessionRing, shownRecallRows } from '../api/recall-record.js';
|
|
21
11
|
import { detectAvailabilityBias } from '../api/availability.js';
|
|
22
|
-
import {
|
|
23
|
-
import {
|
|
24
|
-
import { getReranker } from '../rerankers/index.js';
|
|
25
|
-
import { JEV_DEFAULT_TOP_K } from '../rerankers/jev.js';
|
|
26
|
-
import { isClefModel } from '../rerankers/clef.js';
|
|
12
|
+
import { cliRecallOrigin, cliRecallReranker, cliRecallSetting, DEFAULT_MAX_NEIGHBORS, fitRecallRows, loadCliRecallContinuity, MAX_HOPS, recallJsonRow, } from '../api/recall-cli.js';
|
|
13
|
+
import { cliApiContext } from './api-context.js';
|
|
27
14
|
import { handoffText, printedTokens, sessionTrailText, settleTokens, snapshotText } from '../api/context-render.js';
|
|
28
15
|
import { printError } from './output.js';
|
|
29
|
-
import { parseLimitFlag, parseBudgetFlag, parseAsOfFlag, engineFlags, boolFlag, flagIsTrue } from './flag-values.js';
|
|
16
|
+
import { parseLimitFlag, parseBudgetFlag, parseAsOfFlag, engineFlags, boolFlag, flagIsTrue, isBooleanFlag, } from './flag-values.js';
|
|
30
17
|
import { requireInit } from './shared.js';
|
|
31
18
|
import { recallEntryText, recallHeading, printActiveTaskSnapshot, printSessionEvents, printHandoff, captureConsole } from './print.js';
|
|
32
19
|
import { hostSessionId, hookStoreRoot } from './hook-runtime.js';
|
|
20
|
+
import { CliExit } from './exit.js';
|
|
33
21
|
// JSON.stringify keeps quotes or parens in the matched phrase from blurring the line.
|
|
34
22
|
function planningLine(p) {
|
|
35
23
|
if (p.hint)
|
|
@@ -56,14 +44,14 @@ function cutoffLine(shown, s) {
|
|
|
56
44
|
function failWith(message) {
|
|
57
45
|
return () => {
|
|
58
46
|
printError(message);
|
|
59
|
-
|
|
47
|
+
throw new CliExit(1);
|
|
60
48
|
};
|
|
61
49
|
}
|
|
62
50
|
/** `--graph-stream` implies rrf fusion as well as the graph stream; the CLI fuses the local store only. */
|
|
63
51
|
function parseGraphStreamFlags(flags) {
|
|
64
52
|
let hops;
|
|
65
53
|
if (flags['graph-hops'] !== undefined) {
|
|
66
|
-
if (
|
|
54
|
+
if (isBooleanFlag(flags['graph-hops']))
|
|
67
55
|
failWith(`--graph-hops requires an integer value 1..${MAX_HOPS} (e.g. --graph-hops 2).`)();
|
|
68
56
|
const h = Number(flags['graph-hops']);
|
|
69
57
|
if (!Number.isInteger(h) || h < 1 || h > MAX_HOPS) {
|
|
@@ -73,7 +61,7 @@ function parseGraphStreamFlags(flags) {
|
|
|
73
61
|
}
|
|
74
62
|
let seeds;
|
|
75
63
|
if (flags['graph-seeds'] !== undefined) {
|
|
76
|
-
if (
|
|
64
|
+
if (isBooleanFlag(flags['graph-seeds']))
|
|
77
65
|
failWith('--graph-seeds requires a positive integer value (e.g. --graph-seeds 10).')();
|
|
78
66
|
const s = Number(flags['graph-seeds']);
|
|
79
67
|
if (!Number.isInteger(s) || s < 1)
|
|
@@ -86,7 +74,7 @@ function parseHopsFlags(flags) {
|
|
|
86
74
|
if (flags['hops'] === undefined)
|
|
87
75
|
return {};
|
|
88
76
|
// A value-less `--hops` parses as true, and Number(true) === 1 would silently run a 1-hop expansion.
|
|
89
|
-
if (
|
|
77
|
+
if (isBooleanFlag(flags['hops']))
|
|
90
78
|
return { fail: failWith(`--hops requires an integer value 0..${MAX_HOPS} (e.g. --hops 1).`) };
|
|
91
79
|
const hops = Number(flags['hops']);
|
|
92
80
|
if (!Number.isInteger(hops) || hops < 0 || hops > MAX_HOPS) {
|
|
@@ -95,7 +83,7 @@ function parseHopsFlags(flags) {
|
|
|
95
83
|
const raw = flags['max-neighbors'];
|
|
96
84
|
if (raw === undefined)
|
|
97
85
|
return { value: { hops, maxNeighbors: DEFAULT_MAX_NEIGHBORS } };
|
|
98
|
-
if (
|
|
86
|
+
if (isBooleanFlag(raw))
|
|
99
87
|
return { fail: failWith(`--max-neighbors requires an integer value 1..200.`) };
|
|
100
88
|
const maxNeighbors = Number(raw);
|
|
101
89
|
if (!Number.isInteger(maxNeighbors) || maxNeighbors < 1 || maxNeighbors > 200) {
|
|
@@ -105,18 +93,19 @@ function parseHopsFlags(flags) {
|
|
|
105
93
|
}
|
|
106
94
|
function parseRerankerFlag(flags) {
|
|
107
95
|
const name = flags['reranker'] !== undefined ? String(flags['reranker']).trim() : '';
|
|
108
|
-
let
|
|
96
|
+
let picked;
|
|
109
97
|
try {
|
|
110
|
-
|
|
98
|
+
picked = cliRecallReranker(name);
|
|
111
99
|
}
|
|
112
100
|
catch (err) {
|
|
113
101
|
// An unknown name throws to the top-level handler, as it did when the lookup sat mid-pipeline.
|
|
114
102
|
return { fail: () => { throw err; } };
|
|
115
103
|
}
|
|
116
|
-
if (!
|
|
104
|
+
if (!picked)
|
|
117
105
|
return {};
|
|
106
|
+
const { fn } = picked;
|
|
118
107
|
const raw = flags['reranker-top-k'];
|
|
119
|
-
const topK = raw !== undefined ? Number(raw) :
|
|
108
|
+
const topK = raw !== undefined ? Number(raw) : picked.defaultTopK;
|
|
120
109
|
// slice(0, -1) would quietly drop the last candidate rather than fail.
|
|
121
110
|
if (!Number.isInteger(topK) || topK < 1) {
|
|
122
111
|
return { fail: failWith(`Invalid --reranker-top-k: "${String(raw)}". Must be a positive integer.`) };
|
|
@@ -168,23 +157,25 @@ function parseRecallLateFlags(flags) {
|
|
|
168
157
|
};
|
|
169
158
|
}
|
|
170
159
|
/** Runs `hippo recall`: the flags name the ranking core and this verb's presenter, `retrieve` ranks and records, then the block prints. */
|
|
171
|
-
|
|
160
|
+
async function cmdRecall(hippoRoot, tenantId, query, flags) {
|
|
172
161
|
requireInit(hippoRoot);
|
|
173
|
-
const
|
|
174
|
-
const
|
|
162
|
+
const ctx = cliApiContext(hippoRoot, tenantId);
|
|
163
|
+
const o = parseRecallOptions(ctx, flags);
|
|
164
|
+
const priced = priceRecallEntries(ctx, query, o);
|
|
165
|
+
const { globalRoot } = o.setting;
|
|
175
166
|
const slot = {};
|
|
176
|
-
await api.retrieve(
|
|
167
|
+
await api.retrieve(ctx, {
|
|
177
168
|
query,
|
|
178
169
|
goalTag: o.goalTag,
|
|
179
170
|
sessionId: o.sessionId,
|
|
180
171
|
cliCore: {
|
|
181
172
|
rank: rankOptions(query, flags, o, priced),
|
|
182
173
|
// The global store is a second source for this surface alone, and never when it is the store being searched.
|
|
183
|
-
sources: { globalRoot:
|
|
174
|
+
sources: { globalRoot: globalRoot !== hippoRoot && priced.globalOn ? globalRoot : undefined },
|
|
184
175
|
note: (line) => printError(line),
|
|
185
176
|
hostSessionId: hostSessionId(),
|
|
186
177
|
show: (rank, planning) => {
|
|
187
|
-
slot.presented = presentRecall(
|
|
178
|
+
slot.presented = presentRecall(ctx, query, o, { rank, ...priced }, planning);
|
|
188
179
|
return slot.presented.shown;
|
|
189
180
|
},
|
|
190
181
|
},
|
|
@@ -193,32 +184,23 @@ export async function cmdRecall(hippoRoot, query, flags) {
|
|
|
193
184
|
o.late.error?.fail();
|
|
194
185
|
if (!slot.presented)
|
|
195
186
|
throw new Error('recall ranked but presented nothing');
|
|
196
|
-
|
|
197
|
-
const { results, hints } = fit;
|
|
198
|
-
// Fed after the final detect, so the next recall's cooldown reads the top row and hint this one showed.
|
|
199
|
-
if (fit.anchorRing)
|
|
200
|
-
noteRecall(fit.anchorRing, query, results[0]?.entry.id ?? null, hints.anchoring?.memoryId);
|
|
201
|
-
console.log(text);
|
|
187
|
+
console.log(slot.presented.text);
|
|
202
188
|
}
|
|
203
189
|
/** Every flag recall reads, parsed in the order the single-body command checked them. */
|
|
204
|
-
function parseRecallOptions(
|
|
190
|
+
function parseRecallOptions(ctx, flags) {
|
|
205
191
|
const budget = parseBudgetFlag(flags['budget'], DEFAULT_RECALL_BUDGET);
|
|
206
192
|
const limit = parseLimitFlag(flags['limit']);
|
|
207
193
|
const asJson = boolFlag(flags, 'json');
|
|
208
194
|
const showWhy = boolFlag(flags, 'why');
|
|
209
195
|
const includeSuperseded = boolFlag(flags, 'include-superseded');
|
|
210
196
|
const asOf = parseAsOfFlag(flags);
|
|
211
|
-
const globalRoot = getGlobalRoot();
|
|
212
|
-
const primaryIsGlobal = isGlobalStoreRoot(hippoRoot);
|
|
213
|
-
// Cross-tenant rows must never surface, so the tenant is resolved once and threaded through every load.
|
|
214
|
-
const tenantId = resolveTenantId({});
|
|
215
197
|
// The explicit --scope is the filter input; the detected scope only boosts, so auto-detection never filters.
|
|
216
198
|
const explicitScope = flags['scope'] !== undefined ? String(flags['scope']).trim() : null;
|
|
217
|
-
const
|
|
199
|
+
const setting = cliRecallSetting(ctx, explicitScope);
|
|
200
|
+
const config = loadConfig(ctx.hippoRoot);
|
|
218
201
|
const minResults = flags['min-results'] !== undefined
|
|
219
202
|
? parseInt(String(flags['min-results']), 10)
|
|
220
203
|
: undefined;
|
|
221
|
-
const activeScope = explicitScope || detectScope();
|
|
222
204
|
const graphStream = flagIsTrue(flags, 'graph-stream') ? parseGraphStreamFlags(flags) : undefined;
|
|
223
205
|
const late = parseRecallLateFlags(flags);
|
|
224
206
|
const goalTag = flags['goal'] !== undefined ? String(flags['goal']).trim() : '';
|
|
@@ -226,19 +208,18 @@ function parseRecallOptions(hippoRoot, flags) {
|
|
|
226
208
|
? String(flags['session-id'])
|
|
227
209
|
: envHippoSessionId() ?? '').trim();
|
|
228
210
|
return {
|
|
229
|
-
budget, limit, asJson, showWhy, includeSuperseded, asOf,
|
|
230
|
-
explicitScope, config, minResults,
|
|
211
|
+
budget, limit, asJson, showWhy, includeSuperseded, asOf, setting, tenantId: ctx.tenantId,
|
|
212
|
+
explicitScope, config, minResults, graphStream, late, goalTag, sessionId,
|
|
231
213
|
includeContinuity: boolFlag(flags, 'continuity'),
|
|
232
214
|
};
|
|
233
215
|
}
|
|
234
216
|
/** Each entry priced as the line it prints, with the source marker `--why` shows. */
|
|
235
|
-
function priceRecallEntries(
|
|
236
|
-
const
|
|
237
|
-
const
|
|
238
|
-
const isGlobal = (r) => o.primaryIsGlobal || (globalOn && !localIndex.entries[r.entry.id]);
|
|
217
|
+
function priceRecallEntries(ctx, query, o) {
|
|
218
|
+
const origin = cliRecallOrigin(ctx, o.setting);
|
|
219
|
+
const isGlobal = (r) => origin.isGlobal(r.entry.id);
|
|
239
220
|
const entryText = (r) => recallEntryText(r, query, o.showWhy, isGlobal(r));
|
|
240
221
|
const printCost = (r) => printedTokens(entryText(r));
|
|
241
|
-
return { globalOn, isGlobal, entryText, printCost };
|
|
222
|
+
return { globalOn: origin.globalOn, isGlobal, entryText, printCost };
|
|
242
223
|
}
|
|
243
224
|
/** The ranking core's options; a late flag error halts it before the stage that reads the flag. */
|
|
244
225
|
function rankOptions(query, flags, o, priced) {
|
|
@@ -246,7 +227,7 @@ function rankOptions(query, flags, o, priced) {
|
|
|
246
227
|
const entryBudget = Math.max(0, o.budget - printedTokens(recallHeading(o.budget, o.budget, query)));
|
|
247
228
|
return {
|
|
248
229
|
budget: entryBudget, cost: priced.printCost, limit: o.limit, why: o.showWhy, includeSuperseded: o.includeSuperseded, asOf: o.asOf,
|
|
249
|
-
explicitScope: o.explicitScope, activeScope: o.activeScope,
|
|
230
|
+
explicitScope: o.explicitScope, activeScope: o.setting.activeScope,
|
|
250
231
|
search: { ...engineFlags(flags, o.config), multihop: flagIsTrue(flags, 'multihop') || o.config.multihop.enabled, graphStream: o.graphStream, minResults: o.minResults, explain: false },
|
|
251
232
|
graphHops: o.late.graphHops,
|
|
252
233
|
evcAdaptive: boolFlag(flags, 'evc-adaptive'),
|
|
@@ -260,27 +241,6 @@ function rankOptions(query, flags, o, priced) {
|
|
|
260
241
|
haltBefore: o.late.error?.stage,
|
|
261
242
|
};
|
|
262
243
|
}
|
|
263
|
-
/** Loaded before the zero-result branch, so a no-match query with live continuity still returns a resume packet. */
|
|
264
|
-
function loadRecallContinuity(hippoRoot, o) {
|
|
265
|
-
if (!o.includeContinuity || o.primaryIsGlobal)
|
|
266
|
-
return { activeSnapshot: null, sessionHandoff: null, recentSessionEvents: [] };
|
|
267
|
-
const rawSnapshot = loadActiveTaskSnapshot(hippoRoot, o.tenantId);
|
|
268
|
-
const sessionId = rawSnapshot?.session_id ?? undefined;
|
|
269
|
-
const rawHandoff = sessionId
|
|
270
|
-
? loadLatestHandoff(hippoRoot, o.tenantId, sessionId)
|
|
271
|
-
: null;
|
|
272
|
-
const rawEvents = sessionId
|
|
273
|
-
? listSessionEvents(hippoRoot, o.tenantId, { session_id: sessionId, limit: 5 })
|
|
274
|
-
: [];
|
|
275
|
-
// The same shared scope rule as api.recall; the active scope merges --scope and detectScope().
|
|
276
|
-
const effectiveScope = o.activeScope || undefined;
|
|
277
|
-
const rowScope = (r) => r?.scope ?? null;
|
|
278
|
-
return {
|
|
279
|
-
activeSnapshot: rawSnapshot && passesScopeFilterForRecall(rowScope(rawSnapshot), effectiveScope) ? rawSnapshot : null,
|
|
280
|
-
sessionHandoff: rawHandoff && passesScopeFilterForRecall(rowScope(rawHandoff), effectiveScope) ? rawHandoff : null,
|
|
281
|
-
recentSessionEvents: rawEvents.filter((e) => passesScopeFilterForRecall(rowScope(e), effectiveScope)),
|
|
282
|
-
};
|
|
283
|
-
}
|
|
284
244
|
/** Each pipeline computes its hints over the list it returns, so they follow the list as it shrinks. */
|
|
285
245
|
function recallHinter(query, o, rank) {
|
|
286
246
|
const { tenantId, sessionId } = o;
|
|
@@ -295,7 +255,7 @@ function recallHinter(query, o, rank) {
|
|
|
295
255
|
const availability = availabilityPool
|
|
296
256
|
? detectAvailabilityBias({ topK: list.map((r) => ({ id: r.entry.id, created: r.entry.created })), pool: availabilityPool })
|
|
297
257
|
: null;
|
|
298
|
-
const summary =
|
|
258
|
+
const summary = {
|
|
299
259
|
// The published total includes graph-surfaced rows, so total == preRank + byBudget + returned holds for callers.
|
|
300
260
|
totalCandidates: rank.totalCandidates + rank.graphAdded,
|
|
301
261
|
droppedPreRank: rank.droppedPreRank + held,
|
|
@@ -303,7 +263,7 @@ function recallHinter(query, o, rank) {
|
|
|
303
263
|
summarySubstitutionsAdded: 0,
|
|
304
264
|
freshTailAdded: 0,
|
|
305
265
|
suppressedByInterference: anchoring?.reason === 'memory_dominance' ? 1 : 0, // a query_repeat is a re-ask, not competition
|
|
306
|
-
}
|
|
266
|
+
};
|
|
307
267
|
return { anchoring, availability, summary };
|
|
308
268
|
};
|
|
309
269
|
return { anchorRing, hintsFor };
|
|
@@ -384,7 +344,7 @@ function fitRecallBlock(query, o, ranked, loaded, planning) {
|
|
|
384
344
|
const cmdPlanningFallacyWatching = showPlan ? planning.watching ?? null : null;
|
|
385
345
|
// The first --min-results are kept whatever they cost (the documented exception); the rest skip and continue.
|
|
386
346
|
const floor = o.minResults ?? 1;
|
|
387
|
-
const fitted =
|
|
347
|
+
const fitted = fitRecallRows(ranked.rank.results, left, floor, ranked.printCost);
|
|
388
348
|
// Copies go after every cut, so a merged row the budget drops never hides its sources.
|
|
389
349
|
const shown = (n) => dropHeldCopies(fitted.slice(0, n), (r) => r.entry);
|
|
390
350
|
let kept = fitted.length;
|
|
@@ -403,15 +363,16 @@ function fitRecallBlock(query, o, ranked, loaded, planning) {
|
|
|
403
363
|
return { results, hints, recallText, continuity, continuityTokens, cmdPlanningFallacyHint, cmdPlanningFallacyWatching, anchorRing };
|
|
404
364
|
}
|
|
405
365
|
/** The presenter `retrieve` calls once ranking ends: fits and renders the block, and names the rows and hint rows to record. */
|
|
406
|
-
function presentRecall(
|
|
407
|
-
|
|
366
|
+
function presentRecall(ctx, query, o, ranked, planning) {
|
|
367
|
+
// Loaded before the zero-result branch, so a no-match query with live continuity still returns a resume packet.
|
|
368
|
+
const fit = fitRecallBlock(query, o, ranked, loadCliRecallContinuity(ctx, o.setting, o.includeContinuity), planning);
|
|
408
369
|
const { results, hints } = fit;
|
|
409
370
|
const text = recallOutput(query, o, fit, ranked.isGlobal);
|
|
410
371
|
const audit = shownRecallRows({ tenantId: o.tenantId, actor: 'cli' }, {
|
|
411
372
|
query, ring: fit.anchorRing, topId: results[0]?.entry.id ?? null, anchoring: hints.anchoring, availability: hints.availability,
|
|
412
373
|
});
|
|
413
|
-
// The token ledger books the text this recall prints, on whichever exit it takes.
|
|
414
|
-
return {
|
|
374
|
+
// The token ledger books the text this recall prints, on whichever exit it takes; the ring keeps the hint the final detect made.
|
|
375
|
+
return { text, shown: { results, audit, tokens: estimateTokens(text), anchoredOn: hints.anchoring?.memoryId } };
|
|
415
376
|
}
|
|
416
377
|
/** What this recall prints: the JSON object, or the fitted block. */
|
|
417
378
|
function recallOutput(query, o, fit, isGlobal) {
|
|
@@ -437,13 +398,15 @@ function recallJsonTail(fit, includeContinuity) {
|
|
|
437
398
|
const { cmdPlanningFallacyHint, cmdPlanningFallacyWatching, continuityTokens } = fit;
|
|
438
399
|
const { activeSnapshot, sessionHandoff, recentSessionEvents } = fit.continuity;
|
|
439
400
|
const { anchoring: cmdAnchoringHint, availability: cmdAvailabilityHint, summary: cmdSuppressionSummary } = fit.hints;
|
|
440
|
-
const tail = {
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
401
|
+
const tail = { suppressionSummary: cmdSuppressionSummary };
|
|
402
|
+
if (cmdPlanningFallacyHint)
|
|
403
|
+
tail.planningFallacyHint = cmdPlanningFallacyHint;
|
|
404
|
+
if (cmdPlanningFallacyWatching)
|
|
405
|
+
tail.planningFallacyWatching = cmdPlanningFallacyWatching;
|
|
406
|
+
if (cmdAnchoringHint)
|
|
407
|
+
tail.anchoringHint = cmdAnchoringHint;
|
|
408
|
+
if (cmdAvailabilityHint)
|
|
409
|
+
tail.availabilityHint = cmdAvailabilityHint;
|
|
447
410
|
if (includeContinuity) {
|
|
448
411
|
tail.continuity = {
|
|
449
412
|
activeSnapshot,
|
|
@@ -454,51 +417,12 @@ function recallJsonTail(fit, includeContinuity) {
|
|
|
454
417
|
}
|
|
455
418
|
return tail;
|
|
456
419
|
}
|
|
457
|
-
function
|
|
458
|
-
const base = {
|
|
459
|
-
id: r.entry.id,
|
|
460
|
-
score: r.score,
|
|
461
|
-
strength: r.entry.strength,
|
|
462
|
-
tokens: r.tokens,
|
|
463
|
-
tags: r.entry.tags,
|
|
464
|
-
content: r.entry.content,
|
|
465
|
-
layer: r.entry.layer,
|
|
466
|
-
};
|
|
467
|
-
if (r.entry.layer === Layer.Trace) {
|
|
468
|
-
base.trace_outcome = r.entry.trace_outcome;
|
|
469
|
-
}
|
|
470
|
-
if (r.entry.superseded_by) {
|
|
471
|
-
base.superseded = true;
|
|
472
|
-
base.superseded_by = r.entry.superseded_by;
|
|
473
|
-
}
|
|
474
|
-
if (r.graphVia) {
|
|
475
|
-
base.graphVia = r.graphVia;
|
|
476
|
-
}
|
|
477
|
-
if (showWhy) {
|
|
478
|
-
const explanation = explainMatch(query, r);
|
|
479
|
-
const facets = confidenceFacets(r.entry);
|
|
480
|
-
base.confidence = facets.tier;
|
|
481
|
-
base.aged_out = facets.agedOut;
|
|
482
|
-
base.source = isGlobal ? 'global' : 'local';
|
|
483
|
-
base.reason = explanation.reason;
|
|
484
|
-
base.bm25 = r.bm25;
|
|
485
|
-
base.cosine = r.cosine;
|
|
486
|
-
if (explanation.envelope) {
|
|
487
|
-
base.envelope = explanation.envelope;
|
|
488
|
-
}
|
|
489
|
-
// The ordered lifecycle re-ranking steps, so a caller can see why a row moved.
|
|
490
|
-
if (r.rerankTrace && r.rerankTrace.length > 0) {
|
|
491
|
-
base.rerankTrace = r.rerankTrace;
|
|
492
|
-
}
|
|
493
|
-
}
|
|
494
|
-
return base;
|
|
495
|
-
}
|
|
496
|
-
export async function handleRecall({ hippoRoot, args, flags }) {
|
|
420
|
+
export async function handleRecall({ hippoRoot, tenantId, args, flags }) {
|
|
497
421
|
const query = args.join(' ').trim();
|
|
498
422
|
if (!query) {
|
|
499
423
|
printError('Please provide a search query.');
|
|
500
|
-
|
|
424
|
+
throw new CliExit(1);
|
|
501
425
|
}
|
|
502
|
-
await cmdRecall(hookStoreRoot(hippoRoot), query, flags);
|
|
426
|
+
await cmdRecall(hookStoreRoot(hippoRoot), tenantId, query, flags);
|
|
503
427
|
}
|
|
504
428
|
//# sourceMappingURL=recall.js.map
|
package/dist/cli/refine-llm.d.ts
CHANGED
|
@@ -1,17 +1,5 @@
|
|
|
1
|
-
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
* The rule-based `mergeContents` in consolidate.ts produces functional but
|
|
5
|
-
* ugly semantic memories — typically "[Consolidated from N related memories]"
|
|
6
|
-
* prepended to the longest source, or a bulleted list. `hippo refine` takes
|
|
7
|
-
* those and asks Claude to synthesize a clean, generalized principle.
|
|
8
|
-
*
|
|
9
|
-
* Design choices:
|
|
10
|
-
* - Separate command (not baked into `hippo sleep`) so API-key users opt in.
|
|
11
|
-
* - Idempotent via the `llm-refined` tag — re-running skips already-refined.
|
|
12
|
-
* - Uses fetch directly so no SDK dependency.
|
|
13
|
-
* - On failure (API error, bad response), the original memory is untouched.
|
|
14
|
-
*/
|
|
1
|
+
/** LLM refinement of consolidated semantic memories (`hippo refine`): a separate command so API-key users opt in; idempotent via the `llm-refined` tag.
|
|
2
|
+
* Uses fetch directly (no SDK dependency); on any failure the original memory is untouched. */
|
|
15
3
|
import { MemoryEntry } from '../core/memory.js';
|
|
16
4
|
export interface RefineOptions {
|
|
17
5
|
apiKey: string;
|
|
@@ -22,13 +10,7 @@ export interface RefineOptions {
|
|
|
22
10
|
all?: boolean;
|
|
23
11
|
/** Injected for testing — defaults to the real fetch. */
|
|
24
12
|
fetcher?: typeof fetch;
|
|
25
|
-
/**
|
|
26
|
-
* Tenant scope. When provided, refineStore only scans consolidated
|
|
27
|
-
* entries belonging to this tenant, and parent lookups are scoped to the
|
|
28
|
-
* same tenant. Cross-tenant parents return null from readEntry and are
|
|
29
|
-
* silently skipped (refine still produces output from merged content).
|
|
30
|
-
* Undefined preserves pre-1.12.1 host-wide scan behaviour.
|
|
31
|
-
*/
|
|
13
|
+
/** Tenant scope: only that tenant's consolidated entries are scanned; cross-tenant parents return null and are skipped. */
|
|
32
14
|
tenantId?: string;
|
|
33
15
|
}
|
|
34
16
|
export interface RefineResult {
|
|
@@ -42,20 +24,12 @@ export interface RefineResult {
|
|
|
42
24
|
reason?: string;
|
|
43
25
|
}>;
|
|
44
26
|
}
|
|
45
|
-
/**
|
|
46
|
-
* Ask Claude to synthesize a clean semantic memory from the merged content
|
|
47
|
-
* plus the original source memories. Returns the refined content string or
|
|
48
|
-
* `null` when the API call failed.
|
|
49
|
-
*/
|
|
27
|
+
/** Ask Claude to synthesize a clean semantic memory from the merged content and its sources; returns null when the API call failed. */
|
|
50
28
|
export declare function refineSemanticMemory(merged: string, sources: MemoryEntry[], opts: {
|
|
51
29
|
apiKey: string;
|
|
52
30
|
model?: string;
|
|
53
31
|
fetcher?: typeof fetch;
|
|
54
32
|
}): Promise<string | null>;
|
|
55
|
-
/**
|
|
56
|
-
* Scan the store for consolidated semantic memories, refine each with the
|
|
57
|
-
* LLM, and write the refined content back. Tags with `llm-refined` so
|
|
58
|
-
* repeated runs are idempotent (unless `all` is set).
|
|
59
|
-
*/
|
|
33
|
+
/** Refine each consolidated semantic memory with the LLM and write it back, tagging `llm-refined` so reruns skip it (unless `all`). */
|
|
60
34
|
export declare function refineStore(hippoRoot: string, opts: RefineOptions): Promise<RefineResult>;
|
|
61
35
|
//# sourceMappingURL=refine-llm.d.ts.map
|
package/dist/cli/refine-llm.js
CHANGED
|
@@ -1,26 +1,14 @@
|
|
|
1
|
-
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
* The rule-based `mergeContents` in consolidate.ts produces functional but
|
|
5
|
-
* ugly semantic memories — typically "[Consolidated from N related memories]"
|
|
6
|
-
* prepended to the longest source, or a bulleted list. `hippo refine` takes
|
|
7
|
-
* those and asks Claude to synthesize a clean, generalized principle.
|
|
8
|
-
*
|
|
9
|
-
* Design choices:
|
|
10
|
-
* - Separate command (not baked into `hippo sleep`) so API-key users opt in.
|
|
11
|
-
* - Idempotent via the `llm-refined` tag — re-running skips already-refined.
|
|
12
|
-
* - Uses fetch directly so no SDK dependency.
|
|
13
|
-
* - On failure (API error, bad response), the original memory is untouched.
|
|
14
|
-
*/
|
|
1
|
+
/** LLM refinement of consolidated semantic memories (`hippo refine`): a separate command so API-key users opt in; idempotent via the `llm-refined` tag.
|
|
2
|
+
* Uses fetch directly (no SDK dependency); on any failure the original memory is untouched. */
|
|
15
3
|
import { Layer } from '../core/memory.js';
|
|
16
|
-
import {
|
|
4
|
+
import { REFINED_TAG, storeRefinement } from '../api/index.js';
|
|
5
|
+
import { cliApiContext } from './api-context.js';
|
|
17
6
|
import { loadAllEntries, readEntry } from '../store/entry-reads.js';
|
|
18
7
|
import { redactSecretsStrict } from '../util/secret-detect.js';
|
|
19
8
|
import { sendAnthropicMessage } from '../util/anthropic-messages.js';
|
|
20
9
|
import { log } from '../util/log.js';
|
|
21
10
|
const MAX_REFINE_SOURCES = 8;
|
|
22
11
|
const REFINE_SOURCE_CHARS = 400;
|
|
23
|
-
const REFINED_TAG = 'llm-refined';
|
|
24
12
|
// Output budget for one refined memory, and the shortest reply kept as a refinement.
|
|
25
13
|
const REFINE_MAX_TOKENS = 800;
|
|
26
14
|
const REFINE_MIN_CHARS = 10;
|
|
@@ -28,11 +16,7 @@ const CONSOLIDATED_MARKERS = [
|
|
|
28
16
|
'[Consolidated from',
|
|
29
17
|
'[Consolidated pattern from',
|
|
30
18
|
];
|
|
31
|
-
/**
|
|
32
|
-
* Ask Claude to synthesize a clean semantic memory from the merged content
|
|
33
|
-
* plus the original source memories. Returns the refined content string or
|
|
34
|
-
* `null` when the API call failed.
|
|
35
|
-
*/
|
|
19
|
+
/** Ask Claude to synthesize a clean semantic memory from the merged content and its sources; returns null when the API call failed. */
|
|
36
20
|
export async function refineSemanticMemory(merged, sources, opts) {
|
|
37
21
|
const sourceBlock = sources
|
|
38
22
|
.slice(0, MAX_REFINE_SOURCES)
|
|
@@ -81,11 +65,7 @@ function isConsolidated(entry) {
|
|
|
81
65
|
return false;
|
|
82
66
|
return CONSOLIDATED_MARKERS.some((m) => entry.content.startsWith(m));
|
|
83
67
|
}
|
|
84
|
-
/**
|
|
85
|
-
* Scan the store for consolidated semantic memories, refine each with the
|
|
86
|
-
* LLM, and write the refined content back. Tags with `llm-refined` so
|
|
87
|
-
* repeated runs are idempotent (unless `all` is set).
|
|
88
|
-
*/
|
|
68
|
+
/** Refine each consolidated semantic memory with the LLM and write it back, tagging `llm-refined` so reruns skip it (unless `all`). */
|
|
89
69
|
export async function refineStore(hippoRoot, opts) {
|
|
90
70
|
const result = {
|
|
91
71
|
scanned: 0,
|
|
@@ -120,10 +100,8 @@ async function refineOneEntry(hippoRoot, entry, opts, result) {
|
|
|
120
100
|
const sources = [];
|
|
121
101
|
const parentIds = Array.isArray(entry.parents) ? entry.parents : [];
|
|
122
102
|
for (const pid of parentIds) {
|
|
123
|
-
// Parent lookup scoped
|
|
124
|
-
//
|
|
125
|
-
// still produces output from the merged content alone (graceful
|
|
126
|
-
// degradation rather than refuse-to-refine).
|
|
103
|
+
// Parent lookup is tenant-scoped; cross-tenant parents return null and are skipped,
|
|
104
|
+
// so refine still works from the merged content alone.
|
|
127
105
|
const p = readEntry(hippoRoot, pid, opts.tenantId);
|
|
128
106
|
if (p)
|
|
129
107
|
sources.push(p);
|
|
@@ -143,12 +121,7 @@ async function refineOneEntry(hippoRoot, entry, opts, result) {
|
|
|
143
121
|
result.details.push({ id: entry.id, status: 'refined', reason: 'dry-run (no write)' });
|
|
144
122
|
return;
|
|
145
123
|
}
|
|
146
|
-
|
|
147
|
-
...entry,
|
|
148
|
-
content: refined,
|
|
149
|
-
tags: entry.tags.includes(REFINED_TAG) ? entry.tags : [...entry.tags, REFINED_TAG],
|
|
150
|
-
};
|
|
151
|
-
writeEntry(hippoRoot, updated);
|
|
124
|
+
storeRefinement(cliApiContext(hippoRoot, entry.tenantId), entry, refined);
|
|
152
125
|
result.refined++;
|
|
153
126
|
result.details.push({ id: entry.id, status: 'refined' });
|
|
154
127
|
}
|
package/dist/cli/remember.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { type CommandContext } from './flag-values.js';
|
|
2
|
-
export declare function handleRemember({ hippoRoot, args, flags }: CommandContext): Promise<void>;
|
|
3
|
-
export declare function handleSupersede({ hippoRoot, args, flags }: CommandContext): void
|
|
4
|
-
export declare function handleTrace({ hippoRoot, args, flags }: CommandContext): void
|
|
2
|
+
export declare function handleRemember({ hippoRoot, tenantId, args, flags }: CommandContext): Promise<void>;
|
|
3
|
+
export declare function handleSupersede({ hippoRoot, tenantId, args, flags }: CommandContext): Promise<void>;
|
|
4
|
+
export declare function handleTrace({ hippoRoot, tenantId, args, flags }: CommandContext): Promise<void>;
|
|
5
5
|
//# sourceMappingURL=remember.d.ts.map
|