hippo-memory 1.59.0 → 1.61.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/ablation.js +9 -27
- package/dist/agent-memories/apply.js +4 -1
- package/dist/agent-memories/claude-code.js +1 -1
- package/dist/agent-memories/codex.js +1 -1
- package/dist/agent-memories/gemini.js +1 -1
- package/dist/agent-memories/legacy.js +1 -1
- package/dist/agent-memories/source.js +1 -1
- package/dist/agent-memories/sync.js +8 -3
- package/dist/ambient-store.d.ts +14 -0
- package/dist/ambient-store.js +90 -0
- package/dist/ambient.d.ts +23 -0
- package/dist/ambient.js +72 -50
- package/dist/api/assemble.d.ts +93 -0
- package/dist/api/assemble.js +152 -0
- package/dist/api/audit.d.ts +17 -0
- package/dist/api/audit.js +23 -0
- package/dist/api/auth.d.ts +79 -0
- package/dist/api/auth.js +178 -0
- package/dist/api/context-types.d.ts +105 -0
- package/dist/api/context-types.js +3 -0
- package/dist/api/context.d.ts +31 -0
- package/dist/api/context.js +705 -0
- package/dist/api/dormant.d.ts +30 -0
- package/dist/api/dormant.js +140 -0
- package/dist/api/drill-down.d.ts +84 -0
- package/dist/api/drill-down.js +123 -0
- package/dist/api/forget.d.ts +57 -0
- package/dist/api/forget.js +87 -0
- package/dist/api/goals.d.ts +18 -0
- package/dist/api/goals.js +33 -0
- package/dist/api/learn.d.ts +31 -0
- package/dist/api/learn.js +88 -0
- package/dist/api/outcome.d.ts +61 -0
- package/dist/api/outcome.js +66 -0
- package/dist/api/promote.d.ts +54 -0
- package/dist/api/promote.js +203 -0
- package/dist/api/quarantine.d.ts +24 -0
- package/dist/api/quarantine.js +121 -0
- package/dist/api/recall-types.d.ts +390 -0
- package/dist/api/recall-types.js +3 -0
- package/dist/api/recall.d.ts +36 -0
- package/dist/api/recall.js +634 -0
- package/dist/api/remember.d.ts +35 -0
- package/dist/api/remember.js +43 -0
- package/dist/api/sleep.d.ts +136 -0
- package/dist/api/sleep.js +271 -0
- package/dist/api/tokens.d.ts +26 -0
- package/dist/api/tokens.js +60 -0
- package/dist/api/types.d.ts +56 -0
- package/dist/api/types.js +38 -0
- package/dist/api.d.ts +20 -1260
- package/dist/api.js +25 -2711
- package/dist/audit.d.ts +3 -0
- package/dist/audit.js +7 -3
- package/dist/auth.d.ts +45 -4
- package/dist/auth.js +125 -48
- package/dist/autolearn.js +7 -4
- package/dist/capture/command.d.ts +33 -0
- package/dist/capture/command.js +264 -0
- package/dist/capture/compact.d.ts +44 -0
- package/dist/capture/compact.js +354 -0
- package/dist/capture/extract.d.ts +21 -0
- package/dist/capture/extract.js +464 -0
- package/dist/capture/transcript.d.ts +40 -0
- package/dist/capture/transcript.js +193 -0
- package/dist/capture-error.js +2 -1
- package/dist/churn-git.js +4 -2
- package/dist/cli/audit.d.ts +3 -0
- package/dist/cli/audit.js +159 -0
- package/dist/cli/auth.d.ts +2 -0
- package/dist/cli/auth.js +171 -0
- package/dist/cli/briefs.d.ts +4 -0
- package/dist/cli/briefs.js +435 -0
- package/dist/cli/card.d.ts +3 -0
- package/dist/cli/card.js +333 -0
- package/dist/cli/context.d.ts +15 -0
- package/dist/cli/context.js +366 -0
- package/dist/cli/continuity.d.ts +6 -0
- package/dist/cli/continuity.js +445 -0
- package/dist/cli/curate.d.ts +19 -0
- package/dist/cli/curate.js +555 -0
- package/dist/cli/dag.d.ts +5 -0
- package/dist/cli/dag.js +177 -0
- package/dist/cli/decisions.d.ts +4 -0
- package/dist/cli/decisions.js +528 -0
- package/dist/cli/eval.d.ts +5 -0
- package/dist/cli/eval.js +213 -0
- package/dist/cli/explain.d.ts +4 -0
- package/dist/cli/explain.js +150 -0
- package/dist/cli/goals.d.ts +2 -0
- package/dist/cli/goals.js +196 -0
- package/dist/cli/hook-blocks.d.ts +18 -0
- package/dist/cli/hook-blocks.js +233 -0
- package/dist/cli/init.d.ts +2 -0
- package/dist/cli/init.js +305 -0
- package/dist/cli/maintenance.d.ts +4 -0
- package/dist/cli/maintenance.js +179 -0
- package/dist/cli/playbooks.d.ts +4 -0
- package/dist/cli/playbooks.js +556 -0
- package/dist/cli/projects.js +1 -1
- package/dist/cli/recall.d.ts +7 -0
- package/dist/cli/recall.js +597 -0
- package/dist/cli/remember.d.ts +5 -0
- package/dist/cli/remember.js +442 -0
- package/dist/cli/serve.d.ts +5 -0
- package/dist/cli/serve.js +40 -0
- package/dist/cli/session-hooks.d.ts +29 -0
- package/dist/cli/session-hooks.js +637 -0
- package/dist/cli/setup.d.ts +4 -0
- package/dist/cli/setup.js +376 -0
- package/dist/cli/shared.d.ts +15 -19
- package/dist/cli/shared.js +50 -341
- package/dist/cli/slack.d.ts +2 -0
- package/dist/cli/slack.js +171 -0
- package/dist/cli/status.d.ts +18 -0
- package/dist/cli/status.js +400 -0
- package/dist/cli/transfer.d.ts +10 -0
- package/dist/cli/transfer.js +438 -0
- package/dist/cli/usage.d.ts +85 -0
- package/dist/cli/usage.js +741 -0
- package/dist/cli.d.ts +319 -13
- package/dist/cli.js +436 -8580
- package/dist/client.js +15 -8
- package/dist/compaction-record.js +12 -9
- package/dist/config.js +12 -11
- package/dist/connectors/github/backfill.js +94 -87
- package/dist/connectors/github/cli-impl.js +5 -3
- package/dist/connectors/github/dlq.js +67 -54
- package/dist/connectors/github/ingest.js +34 -35
- package/dist/connectors/github/tenant-routing.js +3 -2
- package/dist/connectors/github/webhook.js +135 -216
- package/dist/connectors/slack/dlq.js +49 -61
- package/dist/connectors/slack/ingest.js +55 -48
- package/dist/connectors/slack/tenant-routing.js +4 -3
- package/dist/connectors/slack/webhook.js +72 -74
- package/dist/consolidate/conflicts.d.ts +10 -0
- package/dist/consolidate/conflicts.js +178 -0
- package/dist/consolidate/decay.d.ts +12 -0
- package/dist/consolidate/decay.js +145 -0
- package/dist/consolidate/llm-passes.d.ts +3 -0
- package/dist/consolidate/llm-passes.js +141 -0
- package/dist/consolidate/merge.d.ts +7 -0
- package/dist/consolidate/merge.js +251 -0
- package/dist/consolidate/physics-pass.d.ts +3 -0
- package/dist/consolidate/physics-pass.js +60 -0
- package/dist/consolidate/run.d.ts +69 -0
- package/dist/consolidate/run.js +76 -0
- package/dist/consolidate/sleep.d.ts +18 -0
- package/dist/consolidate/sleep.js +209 -0
- package/dist/consolidate/traces.d.ts +4 -0
- package/dist/consolidate/traces.js +178 -0
- package/dist/context-auto.js +7 -11
- package/dist/context-render.d.ts +1 -1
- package/dist/context-render.js +1 -1
- package/dist/customer-notes.d.ts +3 -0
- package/dist/customer-notes.js +6 -4
- package/dist/dag.js +13 -12
- package/dist/dashboard-actions.d.ts +20 -0
- package/dist/dashboard-actions.js +88 -0
- package/dist/dashboard-params.d.ts +45 -0
- package/dist/dashboard-params.js +127 -0
- package/dist/dashboard-queries.d.ts +15 -0
- package/dist/dashboard-queries.js +355 -0
- package/dist/dashboard-snapshot.d.ts +138 -0
- package/dist/dashboard-snapshot.js +308 -0
- package/dist/dashboard-types.d.ts +163 -0
- package/dist/dashboard-types.js +3 -0
- package/dist/dashboard.d.ts +6 -7
- package/dist/dashboard.js +231 -203
- package/dist/db/busy.d.ts +5 -0
- package/dist/db/busy.js +24 -0
- package/dist/db/continuity.d.ts +5 -0
- package/dist/db/continuity.js +145 -0
- package/dist/db/meta.d.ts +8 -0
- package/dist/db/meta.js +35 -0
- package/dist/db/migrate.d.ts +9 -0
- package/dist/db/migrate.js +138 -0
- package/dist/db/migrations/index.d.ts +5 -0
- package/dist/db/migrations/index.js +109 -0
- package/dist/db/migrations/types.d.ts +14 -0
- package/dist/db/migrations/types.js +2 -0
- package/dist/db/migrations/v01.d.ts +3 -0
- package/dist/db/migrations/v01.js +38 -0
- package/dist/db/migrations/v02.d.ts +3 -0
- package/dist/db/migrations/v02.js +21 -0
- package/dist/db/migrations/v03.d.ts +3 -0
- package/dist/db/migrations/v03.js +22 -0
- package/dist/db/migrations/v04.d.ts +3 -0
- package/dist/db/migrations/v04.js +28 -0
- package/dist/db/migrations/v05.d.ts +3 -0
- package/dist/db/migrations/v05.js +21 -0
- package/dist/db/migrations/v06.d.ts +3 -0
- package/dist/db/migrations/v06.js +25 -0
- package/dist/db/migrations/v07.d.ts +3 -0
- package/dist/db/migrations/v07.js +13 -0
- package/dist/db/migrations/v08.d.ts +3 -0
- package/dist/db/migrations/v08.js +8 -0
- package/dist/db/migrations/v09.d.ts +3 -0
- package/dist/db/migrations/v09.js +13 -0
- package/dist/db/migrations/v10.d.ts +3 -0
- package/dist/db/migrations/v10.js +17 -0
- package/dist/db/migrations/v11.d.ts +3 -0
- package/dist/db/migrations/v11.js +15 -0
- package/dist/db/migrations/v12.d.ts +3 -0
- package/dist/db/migrations/v12.js +11 -0
- package/dist/db/migrations/v13.d.ts +3 -0
- package/dist/db/migrations/v13.js +15 -0
- package/dist/db/migrations/v14.d.ts +3 -0
- package/dist/db/migrations/v14.js +66 -0
- package/dist/db/migrations/v15.d.ts +3 -0
- package/dist/db/migrations/v15.js +42 -0
- package/dist/db/migrations/v16.d.ts +3 -0
- package/dist/db/migrations/v16.js +61 -0
- package/dist/db/migrations/v17.d.ts +3 -0
- package/dist/db/migrations/v17.js +46 -0
- package/dist/db/migrations/v18.d.ts +3 -0
- package/dist/db/migrations/v18.js +60 -0
- package/dist/db/migrations/v19.d.ts +3 -0
- package/dist/db/migrations/v19.js +28 -0
- package/dist/db/migrations/v20.d.ts +3 -0
- package/dist/db/migrations/v20.js +42 -0
- package/dist/db/migrations/v21.d.ts +3 -0
- package/dist/db/migrations/v21.js +16 -0
- package/dist/db/migrations/v22.d.ts +3 -0
- package/dist/db/migrations/v22.js +82 -0
- package/dist/db/migrations/v23.d.ts +3 -0
- package/dist/db/migrations/v23.js +48 -0
- package/dist/db/migrations/v24.d.ts +3 -0
- package/dist/db/migrations/v24.js +72 -0
- package/dist/db/migrations/v25.d.ts +3 -0
- package/dist/db/migrations/v25.js +46 -0
- package/dist/db/migrations/v26.d.ts +3 -0
- package/dist/db/migrations/v26.js +23 -0
- package/dist/db/migrations/v27.d.ts +3 -0
- package/dist/db/migrations/v27.js +57 -0
- package/dist/db/migrations/v28.d.ts +3 -0
- package/dist/db/migrations/v28.js +38 -0
- package/dist/db/migrations/v29.d.ts +3 -0
- package/dist/db/migrations/v29.js +78 -0
- package/dist/db/migrations/v30.d.ts +3 -0
- package/dist/db/migrations/v30.js +92 -0
- package/dist/db/migrations/v31.d.ts +3 -0
- package/dist/db/migrations/v31.js +74 -0
- package/dist/db/migrations/v32.d.ts +3 -0
- package/dist/db/migrations/v32.js +102 -0
- package/dist/db/migrations/v33.d.ts +3 -0
- package/dist/db/migrations/v33.js +104 -0
- package/dist/db/migrations/v34.d.ts +3 -0
- package/dist/db/migrations/v34.js +93 -0
- package/dist/db/migrations/v35.d.ts +3 -0
- package/dist/db/migrations/v35.js +98 -0
- package/dist/db/migrations/v36.d.ts +3 -0
- package/dist/db/migrations/v36.js +98 -0
- package/dist/db/migrations/v37.d.ts +3 -0
- package/dist/db/migrations/v37.js +219 -0
- package/dist/db/migrations/v38.d.ts +3 -0
- package/dist/db/migrations/v38.js +277 -0
- package/dist/db/migrations/v39.d.ts +3 -0
- package/dist/db/migrations/v39.js +59 -0
- package/dist/db/migrations/v40.d.ts +3 -0
- package/dist/db/migrations/v40.js +74 -0
- package/dist/db/migrations/v41.d.ts +3 -0
- package/dist/db/migrations/v41.js +43 -0
- package/dist/db/migrations/v42.d.ts +3 -0
- package/dist/db/migrations/v42.js +41 -0
- package/dist/db/migrations/v43.d.ts +3 -0
- package/dist/db/migrations/v43.js +67 -0
- package/dist/db/migrations/v44.d.ts +3 -0
- package/dist/db/migrations/v44.js +28 -0
- package/dist/db/migrations/v45.d.ts +3 -0
- package/dist/db/migrations/v45.js +30 -0
- package/dist/db/migrations/v46.d.ts +3 -0
- package/dist/db/migrations/v46.js +25 -0
- package/dist/db/migrations/v47.d.ts +3 -0
- package/dist/db/migrations/v47.js +17 -0
- package/dist/db/migrations/v48.d.ts +3 -0
- package/dist/db/migrations/v48.js +10 -0
- package/dist/db/migrations/v49.d.ts +3 -0
- package/dist/db/migrations/v49.js +31 -0
- package/dist/db/migrations/v50.d.ts +3 -0
- package/dist/db/migrations/v50.js +67 -0
- package/dist/db/migrations/v51.d.ts +3 -0
- package/dist/db/migrations/v51.js +14 -0
- package/dist/db/migrations/v52.d.ts +3 -0
- package/dist/db/migrations/v52.js +7 -0
- package/dist/db/open.d.ts +23 -0
- package/dist/db/open.js +146 -0
- package/dist/db/sqlite.d.ts +21 -0
- package/dist/db/sqlite.js +8 -0
- package/dist/db/tables.d.ts +7 -0
- package/dist/db/tables.js +38 -0
- package/dist/db.d.ts +6 -46
- package/dist/db.js +5 -3036
- package/dist/decisions.d.ts +4 -1
- package/dist/decisions.js +9 -7
- package/dist/dedupe.js +3 -2
- package/dist/delivery-recorder.js +5 -1
- package/dist/doctor.js +4 -3
- package/dist/dormant.js +1 -0
- package/dist/embedding-provider.d.ts +1 -1
- package/dist/embedding-provider.js +7 -5
- package/dist/embeddings.d.ts +9 -52
- package/dist/embeddings.js +47 -298
- package/dist/env.d.ts +75 -0
- package/dist/env.js +119 -0
- package/dist/eval-suite.js +1 -1
- package/dist/eval.js +2 -2
- package/dist/extract.js +5 -4
- package/dist/gated-write.js +3 -1
- package/dist/goals.d.ts +3 -1
- package/dist/goals.js +18 -0
- package/dist/graph/read.d.ts +73 -0
- package/dist/graph/read.js +325 -0
- package/dist/graph/rows.d.ts +45 -0
- package/dist/graph/rows.js +51 -0
- package/dist/graph/types.d.ts +83 -0
- package/dist/graph/types.js +11 -0
- package/dist/graph/write.d.ts +93 -0
- package/dist/{graph.js → graph/write.js} +8 -391
- package/dist/graph-extract.js +2 -1
- package/dist/graph-recall.d.ts +1 -1
- package/dist/graph-recall.js +2 -2
- package/dist/graph-stream.js +1 -1
- package/dist/graph-view.d.ts +1 -1
- package/dist/graph-view.js +1 -1
- package/dist/half-life-migration.d.ts +1 -1
- package/dist/half-life-migration.js +2 -1
- package/dist/handoff.js +3 -0
- package/dist/hooks/codex-session.d.ts +8 -0
- package/dist/hooks/codex-session.js +76 -0
- package/dist/hooks/codex-wrapper.d.ts +55 -0
- package/dist/hooks/codex-wrapper.js +288 -0
- package/dist/hooks/json-hooks.d.ts +63 -0
- package/dist/hooks/json-hooks.js +356 -0
- package/dist/hooks/opencode.d.ts +50 -0
- package/dist/hooks/opencode.js +202 -0
- package/dist/hooks/shared.d.ts +54 -0
- package/dist/hooks/shared.js +77 -0
- package/dist/http-retry.d.ts +2 -0
- package/dist/http-retry.js +4 -3
- package/dist/http-util.d.ts +3 -0
- package/dist/http-util.js +10 -0
- package/dist/{importers.d.ts → importers/core.d.ts} +13 -17
- package/dist/importers/core.js +141 -0
- package/dist/importers/markdown-parse.d.ts +41 -0
- package/dist/importers/markdown-parse.js +132 -0
- package/dist/importers/markdown.d.ts +3 -0
- package/dist/importers/markdown.js +92 -0
- package/dist/importers/sources.d.ts +7 -0
- package/dist/importers/sources.js +229 -0
- package/dist/importers/vault.d.ts +11 -0
- package/dist/importers/vault.js +352 -0
- package/dist/incidents.d.ts +3 -0
- package/dist/incidents.js +8 -5
- package/dist/index.d.ts +25 -6
- package/dist/index.js +23 -6
- package/dist/invalidation.js +2 -1
- package/dist/judgment.js +7 -3
- package/dist/keyset.d.ts +13 -0
- package/dist/keyset.js +8 -0
- package/dist/local-embedding.d.ts +13 -0
- package/dist/local-embedding.js +165 -0
- package/dist/log.d.ts +7 -0
- package/dist/log.js +19 -1
- package/dist/mcp/admin-tools.d.ts +8 -0
- package/dist/mcp/admin-tools.js +116 -0
- package/dist/mcp/format.d.ts +27 -0
- package/dist/mcp/format.js +135 -0
- package/dist/mcp/memory-tools.d.ts +5 -0
- package/dist/mcp/memory-tools.js +83 -0
- package/dist/mcp/protocol.d.ts +83 -0
- package/dist/mcp/protocol.js +55 -0
- package/dist/mcp/recall-tools.d.ts +6 -0
- package/dist/mcp/recall-tools.js +320 -0
- package/dist/mcp/request.d.ts +10 -0
- package/dist/mcp/request.js +163 -0
- package/dist/mcp/server.d.ts +4 -70
- package/dist/mcp/server.js +8 -1172
- package/dist/mcp/session-state.d.ts +11 -0
- package/dist/mcp/session-state.js +28 -0
- package/dist/mcp/stdio.d.ts +8 -0
- package/dist/mcp/stdio.js +79 -0
- package/dist/mcp/tools.d.ts +11 -0
- package/dist/mcp/tools.js +247 -0
- package/dist/memory.d.ts +8 -3
- package/dist/memory.js +27 -1
- package/dist/multihop.d.ts +1 -1
- package/dist/multihop.js +2 -1
- package/dist/owner-validation.js +2 -1
- package/dist/physics-state.js +10 -7
- package/dist/policies.d.ts +3 -0
- package/dist/policies.js +8 -6
- package/dist/postinstall.js +3 -2
- package/dist/predictions/planning-fallacy.d.ts +100 -0
- package/dist/predictions/planning-fallacy.js +190 -0
- package/dist/{predictions.d.ts → predictions/store.d.ts} +7 -102
- package/dist/predictions/store.js +434 -0
- package/dist/processes.d.ts +3 -0
- package/dist/processes.js +8 -5
- package/dist/project-briefs.d.ts +3 -0
- package/dist/project-briefs.js +7 -5
- package/dist/project-identity.d.ts +1 -1
- package/dist/project-identity.js +12 -6
- package/dist/project-merge.js +3 -1
- package/dist/quarantine.d.ts +2 -1
- package/dist/quarantine.js +8 -5
- package/dist/raw-archive-mirror-cleanup.js +2 -1
- package/dist/raw-archive.js +1 -1
- package/dist/recall-history.js +3 -2
- package/dist/recall-pipeline.d.ts +2 -2
- package/dist/recall-pipeline.js +16 -8
- package/dist/recall-scope.js +1 -1
- package/dist/recall-trace.d.ts +3 -3
- package/dist/recall-trace.js +10 -14
- package/dist/refine-llm.js +20 -11
- package/dist/reject-flow.js +6 -1
- package/dist/rerankers/clef.d.ts +2 -2
- package/dist/rerankers/clef.js +72 -30
- package/dist/rerankers/cross-encoder.js +6 -4
- package/dist/rerankers/jev.d.ts +4 -2
- package/dist/rerankers/jev.js +24 -19
- package/dist/rerankers/llm.d.ts +4 -2
- package/dist/rerankers/llm.js +61 -41
- package/dist/rerankers/types.d.ts +1 -1
- package/dist/salience.js +1 -1
- package/dist/same-text.d.ts +2 -0
- package/dist/same-text.js +4 -0
- package/dist/scheduler.d.ts +1 -0
- package/dist/scheduler.js +26 -3
- package/dist/scope.js +4 -3
- package/dist/search/as-of.d.ts +10 -0
- package/dist/search/as-of.js +22 -0
- package/dist/search/bm25-search.d.ts +14 -0
- package/dist/search/bm25-search.js +43 -0
- package/dist/search/bm25.d.ts +15 -0
- package/dist/search/bm25.js +54 -0
- package/dist/search/boosts.d.ts +54 -0
- package/dist/search/boosts.js +94 -0
- package/dist/search/breakdown.d.ts +7 -0
- package/dist/search/breakdown.js +20 -0
- package/dist/search/explain.d.ts +25 -0
- package/dist/search/explain.js +31 -0
- package/dist/search/finalize.d.ts +8 -0
- package/dist/search/finalize.js +52 -0
- package/dist/search/fusion.d.ts +27 -0
- package/dist/search/fusion.js +42 -0
- package/dist/search/hybrid-score.d.ts +20 -0
- package/dist/search/hybrid-score.js +73 -0
- package/dist/search/hybrid.d.ts +46 -0
- package/dist/search/hybrid.js +64 -0
- package/dist/search/physics-search.d.ts +29 -0
- package/dist/search/physics-search.js +162 -0
- package/dist/search/rerank.d.ts +10 -0
- package/dist/search/rerank.js +72 -0
- package/dist/search/temporal.d.ts +15 -0
- package/dist/search/temporal.js +45 -0
- package/dist/search/types.d.ts +91 -0
- package/dist/search/types.js +2 -0
- package/dist/search/vector.d.ts +30 -0
- package/dist/search/vector.js +71 -0
- package/dist/secret-detect.d.ts +2 -0
- package/dist/secret-detect.js +3 -1
- package/dist/server/auth.d.ts +52 -0
- package/dist/server/auth.js +221 -0
- package/dist/server/client-ip.d.ts +25 -0
- package/dist/server/client-ip.js +92 -0
- package/dist/server/cursor.d.ts +23 -0
- package/dist/server/cursor.js +58 -0
- package/dist/server/lifecycle.d.ts +7 -0
- package/dist/server/lifecycle.js +29 -0
- package/dist/server/mcp-http.d.ts +5 -0
- package/dist/server/mcp-http.js +199 -0
- package/dist/server/request.d.ts +33 -0
- package/dist/server/request.js +103 -0
- package/dist/server/routes/admin.d.ts +9 -0
- package/dist/server/routes/admin.js +158 -0
- package/dist/server/routes/customer-notes.d.ts +7 -0
- package/dist/server/routes/customer-notes.js +112 -0
- package/dist/server/routes/decisions.d.ts +7 -0
- package/dist/server/routes/decisions.js +133 -0
- package/dist/server/routes/incidents.d.ts +7 -0
- package/dist/server/routes/incidents.js +126 -0
- package/dist/server/routes/memories.d.ts +10 -0
- package/dist/server/routes/memories.js +179 -0
- package/dist/server/routes/policies.d.ts +8 -0
- package/dist/server/routes/policies.js +151 -0
- package/dist/server/routes/predictions.d.ts +7 -0
- package/dist/server/routes/predictions.js +164 -0
- package/dist/server/routes/processes.d.ts +7 -0
- package/dist/server/routes/processes.js +161 -0
- package/dist/server/routes/project-briefs.d.ts +8 -0
- package/dist/server/routes/project-briefs.js +136 -0
- package/dist/server/routes/recall.d.ts +8 -0
- package/dist/server/routes/recall.js +340 -0
- package/dist/server/routes/skills.d.ts +8 -0
- package/dist/server/routes/skills.js +150 -0
- package/dist/server/types.d.ts +56 -0
- package/dist/server/types.js +2 -0
- package/dist/server/validation.d.ts +14 -0
- package/dist/server/validation.js +91 -0
- package/dist/server.d.ts +7 -61
- package/dist/server.js +92 -2368
- package/dist/session-digest.d.ts +1 -1
- package/dist/session-digest.js +9 -2
- package/dist/shared.d.ts +3 -1
- package/dist/shared.js +46 -40
- package/dist/skills.d.ts +3 -0
- package/dist/skills.js +7 -5
- package/dist/stdin.js +3 -2
- package/dist/store/audit-event.d.ts +19 -0
- package/dist/store/audit-event.js +33 -0
- package/dist/store/candidates.d.ts +42 -0
- package/dist/store/candidates.js +152 -0
- package/dist/store/conflicts.d.ts +44 -0
- package/dist/store/conflicts.js +444 -0
- package/dist/store/delete-and-batch.d.ts +63 -0
- package/dist/store/delete-and-batch.js +310 -0
- package/dist/store/entry-reads.d.ts +92 -0
- package/dist/store/entry-reads.js +255 -0
- package/dist/store/entry-row.d.ts +67 -0
- package/dist/store/entry-row.js +208 -0
- package/dist/store/entry-writes.d.ts +46 -0
- package/dist/store/entry-writes.js +148 -0
- package/dist/store/handoffs.d.ts +26 -0
- package/dist/store/handoffs.js +184 -0
- package/dist/store/index-and-stats.d.ts +52 -0
- package/dist/store/index-and-stats.js +214 -0
- package/dist/store/markdown.d.ts +10 -0
- package/dist/store/markdown.js +108 -0
- package/dist/store/mirrors.d.ts +49 -0
- package/dist/store/mirrors.js +312 -0
- package/dist/store/open.d.ts +15 -0
- package/dist/store/open.js +223 -0
- package/dist/store/rows.d.ts +178 -0
- package/dist/store/rows.js +158 -0
- package/dist/store/search-rows.d.ts +86 -0
- package/dist/store/search-rows.js +254 -0
- package/dist/store/sessions.d.ts +83 -0
- package/dist/store/sessions.js +272 -0
- package/dist/store/summaries.d.ts +94 -0
- package/dist/store/summaries.js +377 -0
- package/dist/store/tenant-lookup.d.ts +12 -0
- package/dist/store/tenant-lookup.js +16 -0
- package/dist/store-cards.js +2 -1
- package/dist/summary-dirty.d.ts +4 -0
- package/dist/summary-dirty.js +32 -0
- package/dist/support-bundle.js +4 -3
- package/dist/tenant.js +2 -2
- package/dist/token-ledger.js +1 -0
- package/dist/tokenize.d.ts +2 -0
- package/dist/tokenize.js +16 -0
- package/dist/transcript-tail.d.ts +7 -0
- package/dist/transcript-tail.js +48 -0
- package/dist/vector-store.d.ts +27 -0
- package/dist/vector-store.js +210 -0
- package/dist/version.d.ts +2 -2
- package/dist/version.js +2 -2
- package/dist/working-memory.js +1 -1
- package/dist/yaml.js +36 -11
- package/dist-ui/assets/ibm-plex-mono-latin-400-normal-CvHOgSBP.woff +0 -0
- package/dist-ui/assets/ibm-plex-mono-latin-400-normal-DMJ8VG8y.woff2 +0 -0
- package/dist-ui/assets/ibm-plex-mono-latin-500-normal-CB9ihrfo.woff +0 -0
- package/dist-ui/assets/ibm-plex-mono-latin-500-normal-DSY6xOcd.woff2 +0 -0
- package/dist-ui/assets/ibm-plex-mono-latin-600-normal-BgSNZQsw.woff2 +0 -0
- package/dist-ui/assets/ibm-plex-mono-latin-600-normal-DWFSQ4vo.woff +0 -0
- package/dist-ui/assets/ibm-plex-sans-latin-400-normal-CDDApCn2.woff2 +0 -0
- package/dist-ui/assets/ibm-plex-sans-latin-400-normal-CYLoc0-x.woff +0 -0
- package/dist-ui/assets/ibm-plex-sans-latin-500-normal-6ng42L7E.woff2 +0 -0
- package/dist-ui/assets/ibm-plex-sans-latin-500-normal-BgVn5rGT.woff +0 -0
- package/dist-ui/assets/ibm-plex-sans-latin-600-normal-Cu4Hd6ag.woff +0 -0
- package/dist-ui/assets/ibm-plex-sans-latin-600-normal-CuJfVYMP.woff2 +0 -0
- package/dist-ui/assets/index-DPN7cP19.js +33 -0
- package/dist-ui/assets/index-dFloKRVr.css +1 -0
- package/dist-ui/index.html +3 -25
- package/extensions/openclaw-plugin/openclaw.plugin.json +1 -1
- package/extensions/openclaw-plugin/package.json +1 -1
- package/openclaw.plugin.json +1 -1
- package/package.json +2 -1
- package/dist/capture.d.ts +0 -155
- package/dist/capture.js +0 -1293
- package/dist/consolidate.d.ts +0 -58
- package/dist/consolidate.js +0 -1123
- package/dist/graph.d.ts +0 -245
- package/dist/hooks.d.ts +0 -208
- package/dist/hooks.js +0 -1073
- package/dist/importers.js +0 -897
- package/dist/predictions.js +0 -620
- package/dist/search.d.ts +0 -320
- package/dist/search.js +0 -968
- package/dist/store.d.ts +0 -744
- package/dist/store.js +0 -3372
- package/dist-ui/assets/d3-BiWEKnn4.js +0 -1
- package/dist-ui/assets/index-BhT8RvO6.js +0 -61
- package/dist-ui/assets/index-RoXXJ5dq.css +0 -1
- package/dist-ui/assets/three-BDgTxR1l.js +0 -4112
|
@@ -0,0 +1,438 @@
|
|
|
1
|
+
// Verbs that move memories in and out: watch, learn, import, export, promote, sync, share and peers.
|
|
2
|
+
import * as path from 'path';
|
|
3
|
+
import * as fs from 'fs';
|
|
4
|
+
import { calculateStrength, deriveHalfLife, computeSchemaFit } from '../memory.js';
|
|
5
|
+
import { isInitialized } from '../store/open.js';
|
|
6
|
+
import { writeEntry } from '../store/entry-writes.js';
|
|
7
|
+
import { readEntry, loadAllEntries } from '../store/entry-reads.js';
|
|
8
|
+
import { updateStats } from '../store/index-and-stats.js';
|
|
9
|
+
import { RejectedValueError } from '../rejection.js';
|
|
10
|
+
import { embedAll, embedMemory } from '../embeddings.js';
|
|
11
|
+
import { loadConfig } from '../config.js';
|
|
12
|
+
import { captureError, runWatched } from '../autolearn.js';
|
|
13
|
+
import { currentMachine, importAtSessionEnd, importForStore } from '../agent-memories/sync.js';
|
|
14
|
+
import { detailLines } from '../agent-memories/report.js';
|
|
15
|
+
import { getGlobalRoot, initGlobal, shareMemory, listPeers, autoShare, transferScore, syncGlobalToLocal, } from '../shared.js';
|
|
16
|
+
import { importChatGPT, importClaude, importCursor, importGenericFile, } from '../importers/sources.js';
|
|
17
|
+
import { importMarkdown } from '../importers/markdown.js';
|
|
18
|
+
import { importVault } from '../importers/vault.js';
|
|
19
|
+
import * as api from '../api.js';
|
|
20
|
+
import * as client from '../client.js';
|
|
21
|
+
import { resolveTenantId } from '../tenant.js';
|
|
22
|
+
import { printError } from './output.js';
|
|
23
|
+
import { requireInit, runViaServerIfAvailable, fmt, learnFromRepo } from './shared.js';
|
|
24
|
+
// ---------------------------------------------------------------------------
|
|
25
|
+
// Watch command
|
|
26
|
+
// ---------------------------------------------------------------------------
|
|
27
|
+
async function cmdWatch(command, hippoRoot) {
|
|
28
|
+
if (!command) {
|
|
29
|
+
printError('Usage: hippo watch "<command>"');
|
|
30
|
+
process.exit(1);
|
|
31
|
+
}
|
|
32
|
+
const { exitCode, stderr } = await runWatched(command);
|
|
33
|
+
if (exitCode === 0) {
|
|
34
|
+
// Success: no noise
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
// Only create memory if hippo is initialized
|
|
38
|
+
if (!isInitialized(hippoRoot)) {
|
|
39
|
+
printError('Command failed but .hippo not initialized. Run `hippo init` to enable auto-learn.');
|
|
40
|
+
process.exit(exitCode);
|
|
41
|
+
}
|
|
42
|
+
const entry = captureError(exitCode, stderr, command, resolveTenantId({}));
|
|
43
|
+
// Compute schema fit against existing memories
|
|
44
|
+
const existingWatch = loadAllEntries(hippoRoot, entry.tenantId);
|
|
45
|
+
const watchFit = computeSchemaFit(entry.content, entry.tags, existingWatch);
|
|
46
|
+
entry.schema_fit = watchFit;
|
|
47
|
+
entry.half_life_days = deriveHalfLife(loadConfig(hippoRoot).defaultHalfLifeDays, entry);
|
|
48
|
+
entry.strength = calculateStrength(entry);
|
|
49
|
+
// AT1 (plan §3 containment): mechanical content from a failed command — a
|
|
50
|
+
// rejection-guard refusal here must not crash the watcher. Skip silently
|
|
51
|
+
// (loud enough via the message below) and still exit with the wrapped
|
|
52
|
+
// command's real exit code.
|
|
53
|
+
try {
|
|
54
|
+
writeEntry(hippoRoot, entry);
|
|
55
|
+
updateStats(hippoRoot, { remembered: 1 });
|
|
56
|
+
void embedMemory(hippoRoot, entry);
|
|
57
|
+
const preview = stderr.trim().slice(0, 80);
|
|
58
|
+
printError(`\nHippo learned from failure: "${preview}"`);
|
|
59
|
+
}
|
|
60
|
+
catch (err) {
|
|
61
|
+
if (err instanceof RejectedValueError) {
|
|
62
|
+
printError(`\nHippo: this failure matches a rejected value (${err.reason ?? 'no reason given'}); not stored.`);
|
|
63
|
+
}
|
|
64
|
+
else {
|
|
65
|
+
throw err;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
process.exit(exitCode);
|
|
69
|
+
}
|
|
70
|
+
// ---------------------------------------------------------------------------
|
|
71
|
+
// Learn command
|
|
72
|
+
// ---------------------------------------------------------------------------
|
|
73
|
+
export function cmdLearn(hippoRoot, flags) {
|
|
74
|
+
requireInit(hippoRoot);
|
|
75
|
+
if (!flags['git']) {
|
|
76
|
+
printError('Usage: hippo learn --git [--days <n>] [--repos <paths>]');
|
|
77
|
+
process.exit(1);
|
|
78
|
+
}
|
|
79
|
+
const days = parseInt(String(flags['days'] ?? '7'), 10);
|
|
80
|
+
console.log(`Scanning git log for the last ${days} days...`);
|
|
81
|
+
const reposFlag = flags['repos'];
|
|
82
|
+
if (reposFlag && typeof reposFlag === 'string') {
|
|
83
|
+
const repos = reposFlag.split(',').map((r) => r.trim()).filter(Boolean);
|
|
84
|
+
let totalAdded = 0;
|
|
85
|
+
let totalSkipped = 0;
|
|
86
|
+
for (const repo of repos) {
|
|
87
|
+
const label = path.basename(repo);
|
|
88
|
+
const { added, skipped } = learnFromRepo(hippoRoot, repo, days, label);
|
|
89
|
+
totalAdded += added;
|
|
90
|
+
totalSkipped += skipped;
|
|
91
|
+
}
|
|
92
|
+
console.log(`Git learn complete: ${totalAdded} new lessons added, ${totalSkipped} duplicates skipped across ${repos.length} repos.`);
|
|
93
|
+
}
|
|
94
|
+
else {
|
|
95
|
+
const { added, skipped } = learnFromRepo(hippoRoot, process.cwd(), days);
|
|
96
|
+
console.log(`Git learn complete: ${added} new lessons added, ${skipped} duplicates skipped.`);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
// ---------------------------------------------------------------------------
|
|
100
|
+
// Import command
|
|
101
|
+
// ---------------------------------------------------------------------------
|
|
102
|
+
function warnRedacted(count) {
|
|
103
|
+
if (count)
|
|
104
|
+
printError(`Warning: secret-shaped text was redacted from ${count} imported ${count === 1 ? 'entry' : 'entries'} before storing`);
|
|
105
|
+
}
|
|
106
|
+
export function cmdImport(hippoRoot, args, flags) {
|
|
107
|
+
const useGlobal = Boolean(flags['global']);
|
|
108
|
+
const dryRun = Boolean(flags['dry-run']);
|
|
109
|
+
const extraTags = Array.isArray(flags['tag'])
|
|
110
|
+
? flags['tag']
|
|
111
|
+
: flags['tag']
|
|
112
|
+
? [String(flags['tag'])]
|
|
113
|
+
: [];
|
|
114
|
+
const targetRoot = useGlobal ? getGlobalRoot() : hippoRoot;
|
|
115
|
+
if (flags['agents']) {
|
|
116
|
+
const opts = { machine: currentMachine(), dryRun };
|
|
117
|
+
// A folder without a store of its own imports as session end would there, so its notes are not hidden.
|
|
118
|
+
const report = useGlobal || isInitialized(hippoRoot)
|
|
119
|
+
? importForStore(useGlobal ? getGlobalRoot() : hippoRoot, opts)
|
|
120
|
+
: importAtSessionEnd(process.cwd(), undefined, opts);
|
|
121
|
+
for (const line of detailLines(report, dryRun))
|
|
122
|
+
console.log(line);
|
|
123
|
+
for (const warning of report.warnings)
|
|
124
|
+
printError(`hippo: agent memories: ${warning}`);
|
|
125
|
+
return;
|
|
126
|
+
}
|
|
127
|
+
if (useGlobal) {
|
|
128
|
+
initGlobal();
|
|
129
|
+
}
|
|
130
|
+
else {
|
|
131
|
+
requireInit(hippoRoot);
|
|
132
|
+
}
|
|
133
|
+
const importOptions = {
|
|
134
|
+
dryRun,
|
|
135
|
+
global: useGlobal,
|
|
136
|
+
extraTags,
|
|
137
|
+
hippoRoot,
|
|
138
|
+
};
|
|
139
|
+
// K1 vault import: a FOLDER importer that mirrors the connector pattern
|
|
140
|
+
// (kind='raw' + tag provenance + archiveRaw deletions), so it dispatches
|
|
141
|
+
// separately from the single-file `importer` function-pointer slot below.
|
|
142
|
+
// It writes through api.remember/archiveRaw which are tenant-scoped, so we
|
|
143
|
+
// resolve the tenant and pass it through. --global is not supported for
|
|
144
|
+
// vault import (the connector raw-archive path is tenant-local).
|
|
145
|
+
if (flags['vault']) {
|
|
146
|
+
const folderPath = String(flags['vault']);
|
|
147
|
+
if (!fs.existsSync(folderPath) || !fs.statSync(folderPath).isDirectory()) {
|
|
148
|
+
printError(`Vault folder not found (or not a directory): ${folderPath}`);
|
|
149
|
+
process.exit(1);
|
|
150
|
+
}
|
|
151
|
+
if (useGlobal) {
|
|
152
|
+
printError('hippo import --vault does not support --global (raw rows are tenant-local).');
|
|
153
|
+
process.exit(1);
|
|
154
|
+
}
|
|
155
|
+
if (typeof flags['name'] !== 'string' || !flags['name'].trim()) {
|
|
156
|
+
// --name is the vault identity key for the destructive source-deletion sync;
|
|
157
|
+
// inferring it from the folder basename let same-basename vaults collide and
|
|
158
|
+
// clobber each other (codex R10 P2). A valueless `--name` parses as boolean
|
|
159
|
+
// true, and String(true) === "true" would silently import under vault:true:*
|
|
160
|
+
// - reject a non-string so it fails fast instead (codex R11 P2).
|
|
161
|
+
printError('hippo import --vault requires --name <vault> (a non-empty identity key for source-deletion sync).');
|
|
162
|
+
process.exit(1);
|
|
163
|
+
}
|
|
164
|
+
if (flags['scope'] !== undefined && (typeof flags['scope'] !== 'string' || !flags['scope'].trim())) {
|
|
165
|
+
// Same valueless-flag trap: a bare `--scope` must not become scope "true".
|
|
166
|
+
// Example uses the source-prefixed private form, since a bare `private` scope
|
|
167
|
+
// is NOT treated as private by recall and importVault rejects it (R13 P2).
|
|
168
|
+
printError('hippo import --vault: --scope requires a value (e.g. --scope vault:private:notes).');
|
|
169
|
+
process.exit(1);
|
|
170
|
+
}
|
|
171
|
+
const tenantId = resolveTenantId({});
|
|
172
|
+
const vaultOptions = {
|
|
173
|
+
...importOptions,
|
|
174
|
+
tenantId,
|
|
175
|
+
name: flags['name'] ? String(flags['name']) : undefined,
|
|
176
|
+
scope: flags['scope'] ? String(flags['scope']) : undefined,
|
|
177
|
+
};
|
|
178
|
+
const vaultResult = importVault(folderPath, vaultOptions);
|
|
179
|
+
console.log(`\nImport Vault: ${folderPath}${dryRun ? ' (dry run - no writes)' : ''}`);
|
|
180
|
+
console.log(` Notes found: ${vaultResult.total}`);
|
|
181
|
+
console.log(` ${dryRun ? 'Would import: ' : 'Imported: '}${vaultResult.imported}`);
|
|
182
|
+
console.log(` Skipped (unchanged): ${vaultResult.skipped}`);
|
|
183
|
+
if ((vaultResult.rejected ?? 0) > 0) {
|
|
184
|
+
console.log(` Rejected (tombstoned): ${vaultResult.rejected}`);
|
|
185
|
+
}
|
|
186
|
+
warnRedacted(vaultResult.redacted);
|
|
187
|
+
console.log(` ${dryRun ? 'Would archive: ' : 'Archived (removed): '}${vaultResult.archived ?? 0}`);
|
|
188
|
+
console.log(` Store: ${hippoRoot}`);
|
|
189
|
+
// Batch producer, same contract as the single-file import below: vault rows
|
|
190
|
+
// write through api.remember (which never embeds), so backfill them here.
|
|
191
|
+
// Floating promise is deliberate; see the comment at the single-file site.
|
|
192
|
+
if (!dryRun && vaultResult.imported >= 1) {
|
|
193
|
+
void embedAll(hippoRoot).catch(() => { });
|
|
194
|
+
}
|
|
195
|
+
return;
|
|
196
|
+
}
|
|
197
|
+
// Determine which importer to use based on flag
|
|
198
|
+
let filePath;
|
|
199
|
+
let importer;
|
|
200
|
+
let importerName = '';
|
|
201
|
+
if (flags['chatgpt']) {
|
|
202
|
+
filePath = String(flags['chatgpt']);
|
|
203
|
+
importer = importChatGPT;
|
|
204
|
+
importerName = 'ChatGPT';
|
|
205
|
+
}
|
|
206
|
+
else if (flags['claude']) {
|
|
207
|
+
filePath = String(flags['claude']);
|
|
208
|
+
importer = importClaude;
|
|
209
|
+
importerName = 'Claude';
|
|
210
|
+
}
|
|
211
|
+
else if (flags['cursor']) {
|
|
212
|
+
filePath = String(flags['cursor']);
|
|
213
|
+
importer = importCursor;
|
|
214
|
+
importerName = 'Cursor';
|
|
215
|
+
}
|
|
216
|
+
else if (flags['file']) {
|
|
217
|
+
filePath = String(flags['file']);
|
|
218
|
+
importer = importGenericFile;
|
|
219
|
+
importerName = 'File';
|
|
220
|
+
}
|
|
221
|
+
else if (flags['markdown']) {
|
|
222
|
+
filePath = String(flags['markdown']);
|
|
223
|
+
importer = importMarkdown;
|
|
224
|
+
importerName = 'Markdown';
|
|
225
|
+
}
|
|
226
|
+
else if (args[0]) {
|
|
227
|
+
// Positional: try to auto-detect from extension
|
|
228
|
+
filePath = args[0];
|
|
229
|
+
importer = importGenericFile;
|
|
230
|
+
importerName = 'File';
|
|
231
|
+
}
|
|
232
|
+
if (!filePath || !importer) {
|
|
233
|
+
printError('Usage: hippo import <--chatgpt|--claude|--cursor|--file|--markdown|--vault> <path>, or hippo import --agents [--dry-run]');
|
|
234
|
+
process.exit(1);
|
|
235
|
+
}
|
|
236
|
+
if (!fs.existsSync(filePath)) {
|
|
237
|
+
printError(`File not found: ${filePath}`);
|
|
238
|
+
process.exit(1);
|
|
239
|
+
}
|
|
240
|
+
const result = importer(filePath, importOptions);
|
|
241
|
+
// Batch producer: embed newly-imported rows on targetRoot in one pass
|
|
242
|
+
// rather than per-row (importers.ts writeEntry sites don't embed). The
|
|
243
|
+
// floating promise is deliberate: libuv keeps the process alive until it
|
|
244
|
+
// settles, so it is not dropped on process exit; `hippo embed --global` (or
|
|
245
|
+
// a local `hippo embed`) is the backstop if it does get interrupted. Do not
|
|
246
|
+
// "fix" this by awaiting it, that would block the CLI on model load/backfill.
|
|
247
|
+
if (!dryRun && result.imported >= 1) {
|
|
248
|
+
void embedAll(targetRoot).catch(() => { });
|
|
249
|
+
}
|
|
250
|
+
const storeLabel = useGlobal ? `global (${getGlobalRoot()})` : targetRoot;
|
|
251
|
+
console.log(`\nImport ${importerName}: ${filePath}`);
|
|
252
|
+
console.log(` Source entries found: ${result.total}`);
|
|
253
|
+
console.log(` Imported: ${result.imported}`);
|
|
254
|
+
console.log(` Skipped (dedup/noise): ${result.skipped}`);
|
|
255
|
+
if ((result.rejected ?? 0) > 0) {
|
|
256
|
+
console.log(` Rejected (tombstoned): ${result.rejected}`);
|
|
257
|
+
}
|
|
258
|
+
warnRedacted(result.redacted);
|
|
259
|
+
if (dryRun) {
|
|
260
|
+
console.log('\n (dry run - nothing written)');
|
|
261
|
+
if (result.entries.length > 0) {
|
|
262
|
+
console.log('\n Would import:');
|
|
263
|
+
for (const e of result.entries.slice(0, 10)) {
|
|
264
|
+
console.log(` - ${e.content.slice(0, 80)}`);
|
|
265
|
+
}
|
|
266
|
+
if (result.entries.length > 10) {
|
|
267
|
+
console.log(` ... and ${result.entries.length - 10} more`);
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
else {
|
|
272
|
+
console.log(` Store: ${storeLabel}`);
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
// ---------------------------------------------------------------------------
|
|
276
|
+
// Promote command
|
|
277
|
+
// ---------------------------------------------------------------------------
|
|
278
|
+
function cmdPromote(hippoRoot, id) {
|
|
279
|
+
requireInit(hippoRoot);
|
|
280
|
+
if (!id) {
|
|
281
|
+
printError('Usage: hippo promote <id>');
|
|
282
|
+
process.exit(1);
|
|
283
|
+
}
|
|
284
|
+
const ctx = {
|
|
285
|
+
hippoRoot,
|
|
286
|
+
tenantId: resolveTenantId({}),
|
|
287
|
+
actor: api.adminActor('cli'),
|
|
288
|
+
};
|
|
289
|
+
try {
|
|
290
|
+
const result = api.promote(ctx, id);
|
|
291
|
+
console.log(`Promoted ${id} to global store as ${result.globalId}`);
|
|
292
|
+
console.log(` Global store: ${getGlobalRoot()}`);
|
|
293
|
+
}
|
|
294
|
+
catch (err) {
|
|
295
|
+
printError(`Failed to promote: ${err.message}`);
|
|
296
|
+
process.exit(1);
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
// ---------------------------------------------------------------------------
|
|
300
|
+
// Sync command
|
|
301
|
+
// ---------------------------------------------------------------------------
|
|
302
|
+
export function cmdSync(hippoRoot, flags = {}) {
|
|
303
|
+
requireInit(hippoRoot);
|
|
304
|
+
const globalRoot = getGlobalRoot();
|
|
305
|
+
if (!isInitialized(globalRoot)) {
|
|
306
|
+
console.log('No global store found. Run `hippo init --global` first.');
|
|
307
|
+
return;
|
|
308
|
+
}
|
|
309
|
+
// v39: other-project rows are skipped by default; secrets always are.
|
|
310
|
+
const includeCrossProject = flags['cross-project'] === true;
|
|
311
|
+
const count = syncGlobalToLocal(hippoRoot, globalRoot, { includeCrossProject });
|
|
312
|
+
console.log(`Synced ${count} global memories into local project.${includeCrossProject ? '' : ' (other-project rows skipped; use --cross-project to include them)'}`);
|
|
313
|
+
}
|
|
314
|
+
export async function handleWatch({ hippoRoot, args }) {
|
|
315
|
+
const watchCmd = args.join(' ').trim();
|
|
316
|
+
await cmdWatch(watchCmd, hippoRoot);
|
|
317
|
+
}
|
|
318
|
+
export async function handlePromote({ hippoRoot, args }) {
|
|
319
|
+
const id = args[0];
|
|
320
|
+
if (!id) {
|
|
321
|
+
printError('Please provide a memory ID.');
|
|
322
|
+
process.exit(1);
|
|
323
|
+
}
|
|
324
|
+
const promoted = await runViaServerIfAvailable(hippoRoot, async (info, apiKey) => {
|
|
325
|
+
try {
|
|
326
|
+
const result = await client.promote(info.url, apiKey, id);
|
|
327
|
+
console.log(`Promoted ${id} to global store as ${result.globalId}`);
|
|
328
|
+
}
|
|
329
|
+
catch (err) {
|
|
330
|
+
printError(`Failed to promote: ${err.message}`);
|
|
331
|
+
process.exit(1);
|
|
332
|
+
}
|
|
333
|
+
});
|
|
334
|
+
if (promoted)
|
|
335
|
+
return;
|
|
336
|
+
cmdPromote(hippoRoot, id);
|
|
337
|
+
}
|
|
338
|
+
export function handleShare({ hippoRoot, args, flags }) {
|
|
339
|
+
const shareId = args[0];
|
|
340
|
+
if (shareId === '--auto' || flags['auto']) {
|
|
341
|
+
// Auto-share mode
|
|
342
|
+
requireInit(hippoRoot);
|
|
343
|
+
const minScore = parseFloat(String(flags['min-score'] ?? '0.6'));
|
|
344
|
+
const dryRun = Boolean(flags['dry-run']);
|
|
345
|
+
const results = autoShare(hippoRoot, { minScore, dryRun, tenantId: resolveTenantId({}) });
|
|
346
|
+
if (results.length === 0) {
|
|
347
|
+
console.log('No memories meet the sharing threshold.');
|
|
348
|
+
}
|
|
349
|
+
else if (dryRun) {
|
|
350
|
+
console.log(`Would share ${results.length} memories:\n`);
|
|
351
|
+
for (const e of results) {
|
|
352
|
+
const score = transferScore(e);
|
|
353
|
+
console.log(` ${e.id} (transfer=${fmt(score)}) ${e.content.slice(0, 80)}...`);
|
|
354
|
+
}
|
|
355
|
+
}
|
|
356
|
+
else {
|
|
357
|
+
console.log(`Shared ${results.length} memories to global store.`);
|
|
358
|
+
for (const e of results) {
|
|
359
|
+
console.log(` ${e.id} <- ${e.source}`);
|
|
360
|
+
}
|
|
361
|
+
}
|
|
362
|
+
}
|
|
363
|
+
else if (shareId) {
|
|
364
|
+
requireInit(hippoRoot);
|
|
365
|
+
const force = Boolean(flags['force']);
|
|
366
|
+
const tenantId = resolveTenantId({});
|
|
367
|
+
const result = shareMemory(hippoRoot, shareId, { force, tenantId });
|
|
368
|
+
if (result) {
|
|
369
|
+
console.log(`Shared [${result.id}] to global store.`);
|
|
370
|
+
console.log(` Source: ${result.source}`);
|
|
371
|
+
}
|
|
372
|
+
else {
|
|
373
|
+
const entry = readEntry(hippoRoot, shareId, tenantId);
|
|
374
|
+
if (entry) {
|
|
375
|
+
const score = transferScore(entry);
|
|
376
|
+
console.log(`Transfer score too low (${fmt(score)}). This memory looks project-specific.`);
|
|
377
|
+
console.log('Use --force to share anyway.');
|
|
378
|
+
}
|
|
379
|
+
else {
|
|
380
|
+
printError(`Memory not found: ${shareId}`);
|
|
381
|
+
process.exit(1);
|
|
382
|
+
}
|
|
383
|
+
}
|
|
384
|
+
}
|
|
385
|
+
else {
|
|
386
|
+
printError('Usage: hippo share <memory_id> [--force] or hippo share --auto [--dry-run]');
|
|
387
|
+
process.exit(1);
|
|
388
|
+
}
|
|
389
|
+
}
|
|
390
|
+
export function handlePeers({ flags }) {
|
|
391
|
+
// D4 v1.12.10: tenant-scoped by default. --all-tenants restores the
|
|
392
|
+
// pre-D4 host-wide view for the rare operator who genuinely wants
|
|
393
|
+
// cross-tenant peer discovery.
|
|
394
|
+
const allTenants = flags['all-tenants'] === true;
|
|
395
|
+
const tenantScope = allTenants ? undefined : resolveTenantId({});
|
|
396
|
+
const peers = listPeers(undefined, tenantScope);
|
|
397
|
+
if (peers.length === 0) {
|
|
398
|
+
console.log('No peers found. Share memories with: hippo share <id>');
|
|
399
|
+
}
|
|
400
|
+
else {
|
|
401
|
+
const scopeLabel = allTenants ? 'global store (all tenants)' : `global store (tenant "${tenantScope}")`;
|
|
402
|
+
console.log(`${peers.length} project${peers.length === 1 ? '' : 's'} contributing to ${scopeLabel}:\n`);
|
|
403
|
+
for (const p of peers) {
|
|
404
|
+
console.log(` ${p.project.padEnd(25)} ${String(p.count).padStart(4)} memories (latest: ${p.latest.slice(0, 10)})`);
|
|
405
|
+
}
|
|
406
|
+
}
|
|
407
|
+
}
|
|
408
|
+
export function handleExport({ hippoRoot, args, flags }) {
|
|
409
|
+
requireInit(hippoRoot);
|
|
410
|
+
const format = flags['format'] || 'json';
|
|
411
|
+
const outputPath = args[0] || null;
|
|
412
|
+
const entries = loadAllEntries(hippoRoot, resolveTenantId({}));
|
|
413
|
+
let output;
|
|
414
|
+
if (format === 'markdown' || format === 'md') {
|
|
415
|
+
output = entries.map(e => {
|
|
416
|
+
const meta = [
|
|
417
|
+
`id: ${e.id}`,
|
|
418
|
+
`created: ${e.created}`,
|
|
419
|
+
`tags: ${e.tags.join(', ')}`,
|
|
420
|
+
`confidence: ${e.confidence}`,
|
|
421
|
+
`half_life: ${e.half_life_days}d`,
|
|
422
|
+
`strength: ${e.strength.toFixed(2)}`,
|
|
423
|
+
].join(' | ');
|
|
424
|
+
return `### ${e.id}\n\n${e.content}\n\n_${meta}_`;
|
|
425
|
+
}).join('\n\n---\n\n');
|
|
426
|
+
}
|
|
427
|
+
else {
|
|
428
|
+
output = JSON.stringify(entries, null, 2);
|
|
429
|
+
}
|
|
430
|
+
if (outputPath) {
|
|
431
|
+
fs.writeFileSync(outputPath, output, 'utf8');
|
|
432
|
+
console.log(`Exported ${entries.length} memories to ${outputPath}`);
|
|
433
|
+
}
|
|
434
|
+
else {
|
|
435
|
+
console.log(output);
|
|
436
|
+
}
|
|
437
|
+
}
|
|
438
|
+
//# sourceMappingURL=transfer.js.map
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
export declare function printAuditPruneUsage(): void;
|
|
2
|
+
export declare function printSlackBackfillUsage(): void;
|
|
3
|
+
export declare function printSlackWorkspacesUsage(): void;
|
|
4
|
+
export declare const USAGE_HEADER = "\nHippo - memory for AI agents that learns what is wrong and ranks it down\n\nUsage: hippo <command> [options]\n\nCommands:";
|
|
5
|
+
export declare const USAGE_EXAMPLES = "\n\nExamples:\n hippo init\n hippo remember \"FRED cache can silently drop series\" --tag error\n hippo recall \"data pipeline issues\" --budget 2000\n hippo context --auto --budget 1500\n hippo conflicts\n hippo reject mem_abc123 --reason \"leaked credential\"\n hippo reject --value \"never store my key again\" --reason \"secret\"\n hippo rejections\n hippo unreject a1b2c3d4e5f6\n hippo dormant \"staging hostname\"\n hippo dormant restore mem_abc123\n hippo tokens --days 7\n hippo session log --id sess_123 --task \"Ship feature\" --type progress --content \"Build is green, next step is docs\"\n hippo session latest --json\n hippo session resume\n hippo snapshot save --task \"Ship feature\" --summary \"Tests are green\" --next-step \"Open the PR\" --session sess_123\n hippo handoff create --summary \"PR is open, tests green\" --next \"Merge after review\" --session sess_123 --artifact src/foo.ts\n hippo handoff create --summary s --constraint a --constraint b --outcome partial --target-runtime codex --card-id c1 --tests pass\n hippo card create --title \"Add cards table\" --repo hippo --depends-on card_abc\n hippo card claim card_abc --runtime codex\n hippo card complete card_abc --outcome success\n hippo card heartbeat card_abc --run 7\n hippo card reclaim\n hippo embed --status\n hippo watch \"npm run build\"\n hippo learn --git --days 30\n hippo promote mem_abc123\n hippo sync\n hippo setup\n hippo hook install claude-code\n hippo decide \"Use PostgreSQL for new services\" --context \"JSONB support\"\n hippo incident \"Prod outage: DB connection pool exhausted\" --context \"spike at 14:00\"\n hippo process new \"Release\" --step \"run tests\" --step \"bump version\" --step \"publish\"\n hippo policy new \"Data retention\" --text \"Delete logs after 90 days\" --from 2026-01-01\n hippo policy asof 2026-03-01 --name \"Data retention\"\n hippo skill new \"Run tests\" --instructions \"npm test before every commit\" --trigger \"before commit\"\n hippo skill export\n hippo brief new \"hippo\" --summary \"Agent-memory library; E2 first-class objects in progress\"\n hippo brief refresh \"hippo\"\n hippo note new \"Acme Corp\" --text \"Renewal call: wants SSO before Q3; champion is the VP Eng\"\n hippo note list --customer \"Acme Corp\" --status active\n hippo graph extract\n hippo invalidate \"REST API\" --dry-run\n hippo invalidate \"REST API\" --reason \"migrated to GraphQL\"\n hippo invalidate --id mem_a1b2c3d4e5f6 --reason \"superseded by new policy\"\n hippo invalidate --churn --dry-run\n hippo export memories.json\n hippo export --format markdown memories.md\n hippo sleep --dry-run\n hippo outcome --good\n hippo status\n";
|
|
6
|
+
/** Each verb's help blocks for the command table, keyed like COMMANDS; a block opens with a newline. */
|
|
7
|
+
export declare const VERB_USAGE: {
|
|
8
|
+
init: string[];
|
|
9
|
+
remember: string[];
|
|
10
|
+
recall: string[];
|
|
11
|
+
drill: string[];
|
|
12
|
+
assemble: string[];
|
|
13
|
+
supersede: string[];
|
|
14
|
+
explain: string[];
|
|
15
|
+
eval: string[];
|
|
16
|
+
trace: string[];
|
|
17
|
+
refine: string[];
|
|
18
|
+
sleep: string[];
|
|
19
|
+
'last-sleep': string[];
|
|
20
|
+
'session-end': string[];
|
|
21
|
+
'pre-compact': string[];
|
|
22
|
+
'post-compact': string[];
|
|
23
|
+
'capture-error': string[];
|
|
24
|
+
'compact-resume': string[];
|
|
25
|
+
'codex-run': string[];
|
|
26
|
+
dedup: string[];
|
|
27
|
+
dag: string[];
|
|
28
|
+
auth: string[];
|
|
29
|
+
goal: string[];
|
|
30
|
+
slack: string[];
|
|
31
|
+
github: string[];
|
|
32
|
+
audit: string[];
|
|
33
|
+
'correction-latency': string[];
|
|
34
|
+
provenance: string[];
|
|
35
|
+
status: string[];
|
|
36
|
+
outcome: string[];
|
|
37
|
+
conflicts: string[];
|
|
38
|
+
resolve: string[];
|
|
39
|
+
reject: string[];
|
|
40
|
+
rejections: string[];
|
|
41
|
+
unreject: string[];
|
|
42
|
+
dormant: string[];
|
|
43
|
+
projects: string[];
|
|
44
|
+
quarantine: string[];
|
|
45
|
+
tokens: string[];
|
|
46
|
+
failures: string[];
|
|
47
|
+
doctor: string[];
|
|
48
|
+
'support-bundle': string[];
|
|
49
|
+
snapshot: string[];
|
|
50
|
+
session: string[];
|
|
51
|
+
handoff: string[];
|
|
52
|
+
card: string[];
|
|
53
|
+
predict: string[];
|
|
54
|
+
current: string[];
|
|
55
|
+
forget: string[];
|
|
56
|
+
inspect: string[];
|
|
57
|
+
context: string[];
|
|
58
|
+
hook: string[];
|
|
59
|
+
setup: string[];
|
|
60
|
+
'daily-runner': string[];
|
|
61
|
+
embed: string[];
|
|
62
|
+
watch: string[];
|
|
63
|
+
learn: string[];
|
|
64
|
+
promote: string[];
|
|
65
|
+
sync: string[];
|
|
66
|
+
share: string[];
|
|
67
|
+
peers: string[];
|
|
68
|
+
import: string[];
|
|
69
|
+
export: string[];
|
|
70
|
+
capture: string[];
|
|
71
|
+
dashboard: string[];
|
|
72
|
+
wm: string[];
|
|
73
|
+
mcp: string[];
|
|
74
|
+
serve: string[];
|
|
75
|
+
invalidate: string[];
|
|
76
|
+
decide: string[];
|
|
77
|
+
incident: string[];
|
|
78
|
+
process: string[];
|
|
79
|
+
policy: string[];
|
|
80
|
+
skill: string[];
|
|
81
|
+
brief: string[];
|
|
82
|
+
note: string[];
|
|
83
|
+
graph: string[];
|
|
84
|
+
};
|
|
85
|
+
//# sourceMappingURL=usage.d.ts.map
|