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
package/dist/index.d.ts
CHANGED
|
@@ -5,22 +5,41 @@ import { type CreateMemoryOptions, type MemoryEntry } from './memory.js';
|
|
|
5
5
|
export { MemoryEntry, Layer, EmotionalValence, ConfidenceLevel, DecayOptions, calculateStrength, resolveConfidence, confidenceFacets, type ConfidenceFacets, applyOutcome, generateId, computeSchemaFit } from './memory.js';
|
|
6
6
|
/** Published signature, so `baseHalfLifeDays` stays optional here; hippo's own writers use the strict one in memory.ts. */
|
|
7
7
|
export declare function createMemory(content: string, options?: Partial<CreateMemoryOptions>): MemoryEntry;
|
|
8
|
-
export { search
|
|
9
|
-
export {
|
|
8
|
+
export { search } from './search/bm25-search.js';
|
|
9
|
+
export { hybridSearch } from './search/hybrid.js';
|
|
10
|
+
export { physicsSearch } from './search/physics-search.js';
|
|
11
|
+
export { explainMatch, MatchExplanation } from './search/explain.js';
|
|
12
|
+
export { detectTemporalDirection, temporalBoost, computeTemporalRange } from './search/temporal.js';
|
|
13
|
+
export { SearchResult } from './search/types.js';
|
|
14
|
+
export { estimateTokens } from './token-ledger.js';
|
|
15
|
+
export { tokenize, textOverlap } from './tokenize.js';
|
|
10
16
|
export { markRetrieved } from './memory.js';
|
|
11
17
|
export { multihopSearch } from './multihop.js';
|
|
12
18
|
export { graphExpandRecall, MAX_HOPS, DEFAULT_MAX_NEIGHBORS, type GraphExpandOpts } from './graph-recall.js';
|
|
13
|
-
export { initStore
|
|
19
|
+
export { initStore } from './store/open.js';
|
|
20
|
+
export { writeEntry } from './store/entry-writes.js';
|
|
21
|
+
export { loadAllEntries, readEntry } from './store/entry-reads.js';
|
|
22
|
+
export { deleteEntry } from './store/delete-and-batch.js';
|
|
23
|
+
export { loadSearchEntries, loadRecallSearchEntries } from './store/search-rows.js';
|
|
24
|
+
export { loadIndex, rebuildIndex, loadSessionDecayContext, SessionDecayContext } from './store/index-and-stats.js';
|
|
25
|
+
export { saveActiveTaskSnapshot, loadActiveTaskSnapshot, loadFreshActiveTaskSnapshot, SNAPSHOT_AMBIENT_MAX_AGE_MS, closeTaskSnapshotsForSession, clearActiveTaskSnapshot, appendSessionEvent, listSessionEvents, } from './store/sessions.js';
|
|
26
|
+
export { listMemoryConflicts, replaceDetectedConflicts, resolveConflict } from './store/conflicts.js';
|
|
27
|
+
export { saveSessionHandoff, loadLatestHandoff, loadHandoffById, stampHandoffOutcome, writeSessionEndHandoff, } from './store/handoffs.js';
|
|
14
28
|
export { createCard, loadCard, listCards, loadCardDeps, loadCardRuns, loadCardComments, claimCard, heartbeatCard, blockCard, reviewCard, completeCard, reclaimExpiredCards, addCardComment, loadLatestHandoffForCard, } from './store-cards.js';
|
|
15
29
|
export { SessionHandoff, HandoffOutcome, HandoffEvidence, isHandoffOutcome } from './handoff.js';
|
|
16
30
|
export { Card, CardStatus, CardRun, CardComment, CardTransitions, isCardStatus, CARD_TRANSITIONS, CARD_LEASE_MS } from './card.js';
|
|
17
|
-
export { consolidate
|
|
31
|
+
export { consolidate } from './consolidate/sleep.js';
|
|
32
|
+
export { ConsolidationResult } from './consolidate/run.js';
|
|
18
33
|
export { strengthBucket } from './dedupe.js';
|
|
19
|
-
export { isEmbeddingAvailable, getEmbedding
|
|
34
|
+
export { isEmbeddingAvailable, getEmbedding } from './local-embedding.js';
|
|
35
|
+
export { cosineSimilarity, loadEmbeddingIndex, saveEmbeddingIndex, embedMemory, embedAll, } from './embeddings.js';
|
|
20
36
|
export { captureError, extractLessons, partitionLessons, deduplicateLesson, runWatched, fetchGitLog, } from './autolearn.js';
|
|
21
37
|
export { getGlobalRoot, initGlobal, promoteToGlobal, searchBoth, searchBothHybrid, syncGlobalToLocal, HybridSearchOptions, transferScore, shareMemory, listPeers, autoShare, } from './shared.js';
|
|
22
38
|
export { wmPush, wmRead, wmClear, wmFlush, WorkingMemoryItem, WM_MAX_ENTRIES, } from './working-memory.js';
|
|
23
|
-
export { importChatGPT, importClaude, importCursor, importGenericFile,
|
|
39
|
+
export { importChatGPT, importClaude, importCursor, importGenericFile, } from './importers/sources.js';
|
|
40
|
+
export { importMarkdown } from './importers/markdown.js';
|
|
41
|
+
export { importVault } from './importers/vault.js';
|
|
42
|
+
export { importEntries, ImportResult, ImportOptions } from './importers/core.js';
|
|
24
43
|
export { runFeatureEval, formatResult, resultToBaseline, detectRegressions, buildSyntheticCorpus, } from './eval-suite.js';
|
|
25
44
|
export { computeSalience, SalienceDecision, SalienceResult, SalienceOptions, } from './salience.js';
|
|
26
45
|
export { computeAmbientState, renderAmbientSummary, formatAmbientVector, AmbientState, } from './ambient.js';
|
package/dist/index.js
CHANGED
|
@@ -7,22 +7,36 @@ export { Layer, calculateStrength, resolveConfidence, confidenceFacets, applyOut
|
|
|
7
7
|
export function createMemory(content, options = {}) {
|
|
8
8
|
return createStoreMemory(content, { ...options, baseHalfLifeDays: options.baseHalfLifeDays ?? DEFAULT_HALF_LIFE_DAYS });
|
|
9
9
|
}
|
|
10
|
-
export { search
|
|
11
|
-
export {
|
|
10
|
+
export { search } from './search/bm25-search.js';
|
|
11
|
+
export { hybridSearch } from './search/hybrid.js';
|
|
12
|
+
export { physicsSearch } from './search/physics-search.js';
|
|
13
|
+
export { explainMatch } from './search/explain.js';
|
|
14
|
+
export { detectTemporalDirection, temporalBoost, computeTemporalRange } from './search/temporal.js';
|
|
15
|
+
export { estimateTokens } from './token-ledger.js';
|
|
16
|
+
export { tokenize, textOverlap } from './tokenize.js';
|
|
12
17
|
export { markRetrieved } from './memory.js';
|
|
13
18
|
export { multihopSearch } from './multihop.js';
|
|
14
19
|
export { graphExpandRecall, MAX_HOPS, DEFAULT_MAX_NEIGHBORS } from './graph-recall.js';
|
|
15
|
-
export { initStore
|
|
20
|
+
export { initStore } from './store/open.js';
|
|
21
|
+
export { writeEntry } from './store/entry-writes.js';
|
|
22
|
+
export { loadAllEntries, readEntry } from './store/entry-reads.js';
|
|
23
|
+
export { deleteEntry } from './store/delete-and-batch.js';
|
|
24
|
+
export { loadSearchEntries, loadRecallSearchEntries } from './store/search-rows.js';
|
|
25
|
+
export { loadIndex, rebuildIndex, loadSessionDecayContext } from './store/index-and-stats.js';
|
|
26
|
+
export { saveActiveTaskSnapshot, loadActiveTaskSnapshot, loadFreshActiveTaskSnapshot, SNAPSHOT_AMBIENT_MAX_AGE_MS, closeTaskSnapshotsForSession, clearActiveTaskSnapshot, appendSessionEvent, listSessionEvents, } from './store/sessions.js';
|
|
27
|
+
export { listMemoryConflicts, replaceDetectedConflicts, resolveConflict } from './store/conflicts.js';
|
|
28
|
+
export { saveSessionHandoff, loadLatestHandoff, loadHandoffById, stampHandoffOutcome, writeSessionEndHandoff, } from './store/handoffs.js';
|
|
16
29
|
export { createCard, loadCard, listCards, loadCardDeps, loadCardRuns, loadCardComments, claimCard, heartbeatCard, blockCard, reviewCard, completeCard, reclaimExpiredCards, addCardComment, loadLatestHandoffForCard, } from './store-cards.js';
|
|
17
30
|
// Feature 5: Session handoff
|
|
18
31
|
export { isHandoffOutcome } from './handoff.js';
|
|
19
32
|
// W2a: work-queue cards
|
|
20
33
|
export { isCardStatus, CARD_TRANSITIONS, CARD_LEASE_MS } from './card.js';
|
|
21
|
-
export { consolidate } from './consolidate.js';
|
|
34
|
+
export { consolidate } from './consolidate/sleep.js';
|
|
22
35
|
// Announced public in CHANGELOG 1.26.3 but never re-exported; the rest of dedupe.js stays internal.
|
|
23
36
|
export { strengthBucket } from './dedupe.js';
|
|
24
37
|
// Feature 1: Embedding search
|
|
25
|
-
export { isEmbeddingAvailable, getEmbedding
|
|
38
|
+
export { isEmbeddingAvailable, getEmbedding } from './local-embedding.js';
|
|
39
|
+
export { cosineSimilarity, loadEmbeddingIndex, saveEmbeddingIndex, embedMemory, embedAll, } from './embeddings.js';
|
|
26
40
|
// Feature 2: Auto-learn from errors
|
|
27
41
|
export { captureError, extractLessons, partitionLessons, deduplicateLesson, runWatched, fetchGitLog, } from './autolearn.js';
|
|
28
42
|
// Feature 3: Cross-agent shared memory
|
|
@@ -30,7 +44,10 @@ export { getGlobalRoot, initGlobal, promoteToGlobal, searchBoth, searchBothHybri
|
|
|
30
44
|
// Feature 5: Working memory
|
|
31
45
|
export { wmPush, wmRead, wmClear, wmFlush, WM_MAX_ENTRIES, } from './working-memory.js';
|
|
32
46
|
// Feature 4: Memory importers
|
|
33
|
-
export { importChatGPT, importClaude, importCursor, importGenericFile,
|
|
47
|
+
export { importChatGPT, importClaude, importCursor, importGenericFile, } from './importers/sources.js';
|
|
48
|
+
export { importMarkdown } from './importers/markdown.js';
|
|
49
|
+
export { importVault } from './importers/vault.js';
|
|
50
|
+
export { importEntries } from './importers/core.js';
|
|
34
51
|
// Feature eval suite
|
|
35
52
|
export { runFeatureEval, formatResult, resultToBaseline, detectRegressions, buildSyntheticCorpus, } from './eval-suite.js';
|
|
36
53
|
// Pineal gland: salience gate
|
package/dist/invalidation.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { writeEntry } from './store/entry-writes.js';
|
|
2
|
+
import { loadAllEntries, readEntry } from './store/entry-reads.js';
|
|
2
3
|
import { openHippoDb, closeHippoDb } from './db.js';
|
|
3
4
|
import { CHURN_STALE_TAG } from './memory.js';
|
|
4
5
|
import { GitReadError, gitLsFilesAtHead, fetchChurnWindowLog, gitGrepPresence, resolveCommitBefore, packageScriptsAt, } from './churn-git.js';
|
package/dist/judgment.js
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
/** Typed judgment over capture candidates via TypeSafe's Jev (System One).
|
|
2
2
|
* Regex picks WHAT is a candidate; it cannot say what is worth keeping, so
|
|
3
3
|
* every captured memory currently lands on a flat schema_fit of 0.5. */
|
|
4
|
+
import { envTypesafeApiKey } from './env.js';
|
|
4
5
|
import { fetchWithRetry } from './http-retry.js';
|
|
6
|
+
import { log } from './log.js';
|
|
5
7
|
const ENDPOINT = 'https://api.typesafe.ai/v1/systemone';
|
|
6
8
|
const DEFAULT_MODEL = 'jev-1.13.0';
|
|
7
9
|
const MAX_CONCURRENCY = 8;
|
|
@@ -36,7 +38,7 @@ const KINDS = ['error', 'decision', 'convention', 'preference', 'trivia'];
|
|
|
36
38
|
const VALENCES = ['critical', 'negative', 'positive', 'neutral'];
|
|
37
39
|
/** Absent key means hippo keeps its pre-Jev behaviour and makes no HTTP call. */
|
|
38
40
|
export function judgmentApiKey() {
|
|
39
|
-
const key =
|
|
41
|
+
const key = envTypesafeApiKey()?.trim();
|
|
40
42
|
return key ? key : undefined;
|
|
41
43
|
}
|
|
42
44
|
function oneOf(value, allowed) {
|
|
@@ -66,7 +68,8 @@ async function post(content, opts) {
|
|
|
66
68
|
}),
|
|
67
69
|
}, { timeoutMs: JUDGE_TIMEOUT_MS, fetchFn: opts.fetcher });
|
|
68
70
|
}
|
|
69
|
-
catch {
|
|
71
|
+
catch (err) {
|
|
72
|
+
log.debug(`judge: request failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
70
73
|
return null;
|
|
71
74
|
}
|
|
72
75
|
return res.ok ? res : null;
|
|
@@ -87,7 +90,8 @@ export async function judge(content, opts) {
|
|
|
87
90
|
// optional-chained and range-checked before use, so a lie here returns null.
|
|
88
91
|
data = await res.json();
|
|
89
92
|
}
|
|
90
|
-
catch {
|
|
93
|
+
catch (err) {
|
|
94
|
+
log.debug(`judge: unreadable response: ${err instanceof Error ? err.message : String(err)}`);
|
|
91
95
|
return null;
|
|
92
96
|
}
|
|
93
97
|
const durable = data.answers?.durable?.noul;
|
package/dist/keyset.d.ts
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/** The sort key and id of the last row a page returned. */
|
|
2
|
+
export interface KeysetPosition {
|
|
3
|
+
readonly key: string | number;
|
|
4
|
+
readonly id: string | number;
|
|
5
|
+
}
|
|
6
|
+
/** A WHERE fragment and the params it binds. */
|
|
7
|
+
export interface KeysetClause {
|
|
8
|
+
sql: string;
|
|
9
|
+
params: Array<string | number>;
|
|
10
|
+
}
|
|
11
|
+
/** An ` AND ...` WHERE fragment and its params selecting rows strictly after `after`; empty when `after` is unset. */
|
|
12
|
+
export declare function keysetAfter(sortCol: string, idCol: string, after: KeysetPosition | undefined): KeysetClause;
|
|
13
|
+
//# sourceMappingURL=keyset.d.ts.map
|
package/dist/keyset.js
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
// Keyset paging for list queries ordered by (sort key DESC, id DESC), so a page never skips or repeats a row when rows arrive between requests.
|
|
2
|
+
/** An ` AND ...` WHERE fragment and its params selecting rows strictly after `after`; empty when `after` is unset. */
|
|
3
|
+
export function keysetAfter(sortCol, idCol, after) {
|
|
4
|
+
if (!after)
|
|
5
|
+
return { sql: '', params: [] };
|
|
6
|
+
return { sql: ` AND (${sortCol}, ${idCol}) < (?, ?)`, params: [after.key, after.id] };
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=keyset.js.map
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export declare const DEFAULT_EMBEDDING_MODEL = "Xenova/all-MiniLM-L6-v2";
|
|
2
|
+
/** BGE was trained with CLS pooling; everything else gets mean, the sentence-transformers default, since CLS degrades mean-trained models. */
|
|
3
|
+
export declare function poolingFor(model: string): 'cls' | 'mean';
|
|
4
|
+
/** `query` is search input, `passage` is a document being indexed; no role means no prefix on any model. */
|
|
5
|
+
export type EmbeddingRole = 'query' | 'passage';
|
|
6
|
+
/** e5 models only match a query to a passage when each side carries its trained prefix. */
|
|
7
|
+
export declare function prefixFor(model: string, role?: EmbeddingRole): string;
|
|
8
|
+
/** Check (synchronously) if @xenova/transformers or @huggingface/transformers is installed. */
|
|
9
|
+
export declare function isEmbeddingAvailable(): boolean;
|
|
10
|
+
export declare function resolveEmbeddingModel(hippoRoot: string, explicitModel?: string): string;
|
|
11
|
+
/** Embeds `text` with the local model, or returns `[]` when Transformers.js is missing or fails; `role` adds e5-style prefixes. */
|
|
12
|
+
export declare function getEmbedding(text: string, model?: string, role?: EmbeddingRole): Promise<number[]>;
|
|
13
|
+
//# sourceMappingURL=local-embedding.d.ts.map
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
// The local Transformers.js embedder, a leaf so embedding-provider.ts can wrap it without importing embeddings.ts.
|
|
2
|
+
import { envModelCache } from './env.js';
|
|
3
|
+
import * as fs from 'fs';
|
|
4
|
+
import * as path from 'path';
|
|
5
|
+
import { createRequire } from 'module';
|
|
6
|
+
import { loadConfig } from './config.js';
|
|
7
|
+
import { log } from './log.js';
|
|
8
|
+
const _require = createRequire(import.meta.url);
|
|
9
|
+
let _embeddingAvailable = null;
|
|
10
|
+
// A pipeline is expensive to load, so one instance per model is kept for the process.
|
|
11
|
+
const _pipelineInstances = new Map();
|
|
12
|
+
const _pipelineLoading = new Map();
|
|
13
|
+
export const DEFAULT_EMBEDDING_MODEL = 'Xenova/all-MiniLM-L6-v2';
|
|
14
|
+
/** BGE was trained with CLS pooling; everything else gets mean, the sentence-transformers default, since CLS degrades mean-trained models. */
|
|
15
|
+
export function poolingFor(model) {
|
|
16
|
+
return /\bbge\b/i.test(model) ? 'cls' : 'mean';
|
|
17
|
+
}
|
|
18
|
+
/** e5 models only match a query to a passage when each side carries its trained prefix. */
|
|
19
|
+
export function prefixFor(model, role) {
|
|
20
|
+
if (!role)
|
|
21
|
+
return '';
|
|
22
|
+
if (/\be5\b/i.test(model)) {
|
|
23
|
+
return role === 'query' ? 'query: ' : 'passage: ';
|
|
24
|
+
}
|
|
25
|
+
return '';
|
|
26
|
+
}
|
|
27
|
+
// Use Function constructor to bypass TypeScript static module resolution
|
|
28
|
+
// for optional peer dependencies that may not be installed.
|
|
29
|
+
// SAFETY: `import(s)` always resolves to a module namespace object (or rejects);
|
|
30
|
+
// Promise<object> names that honestly without claiming a specific module shape.
|
|
31
|
+
const _dynImport = new Function('s', 'return import(s)');
|
|
32
|
+
/** Check (synchronously) if @xenova/transformers or @huggingface/transformers is installed. */
|
|
33
|
+
export function isEmbeddingAvailable() {
|
|
34
|
+
if (_embeddingAvailable !== null)
|
|
35
|
+
return _embeddingAvailable;
|
|
36
|
+
try {
|
|
37
|
+
_require.resolve('@xenova/transformers');
|
|
38
|
+
_embeddingAvailable = true;
|
|
39
|
+
return true;
|
|
40
|
+
}
|
|
41
|
+
catch {
|
|
42
|
+
// fall through
|
|
43
|
+
}
|
|
44
|
+
try {
|
|
45
|
+
_require.resolve('@huggingface/transformers');
|
|
46
|
+
_embeddingAvailable = true;
|
|
47
|
+
return true;
|
|
48
|
+
}
|
|
49
|
+
catch {
|
|
50
|
+
// fall through
|
|
51
|
+
}
|
|
52
|
+
_embeddingAvailable = false;
|
|
53
|
+
return false;
|
|
54
|
+
}
|
|
55
|
+
// Importing both packages loads two incompatible onnxruntime-node builds whose finalizers can double-free on exit,
|
|
56
|
+
// so pick one first: the maintained package hippo ships, with Xenova only as a fallback a user installed.
|
|
57
|
+
function resolveTransformersPackage() {
|
|
58
|
+
try {
|
|
59
|
+
_require.resolve('@huggingface/transformers');
|
|
60
|
+
return '@huggingface/transformers';
|
|
61
|
+
}
|
|
62
|
+
catch {
|
|
63
|
+
// fall through
|
|
64
|
+
}
|
|
65
|
+
try {
|
|
66
|
+
_require.resolve('@xenova/transformers');
|
|
67
|
+
return '@xenova/transformers';
|
|
68
|
+
}
|
|
69
|
+
catch {
|
|
70
|
+
return null; // neither optional package is installed; callers fall back to no local embeddings
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
74
|
+
async function loadPipeline(model) {
|
|
75
|
+
if (_pipelineInstances.has(model))
|
|
76
|
+
return _pipelineInstances.get(model);
|
|
77
|
+
if (_pipelineLoading.has(model))
|
|
78
|
+
return _pipelineLoading.get(model);
|
|
79
|
+
const loading = (async () => {
|
|
80
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
81
|
+
const pkg = resolveTransformersPackage();
|
|
82
|
+
if (!pkg)
|
|
83
|
+
return null;
|
|
84
|
+
let pipelineFn = null;
|
|
85
|
+
try {
|
|
86
|
+
// SAFETY: the resolved module's shape is untyped by design (optional peer
|
|
87
|
+
// dependency); pipelineFn/mod.env are read defensively below and any
|
|
88
|
+
// failure to find a usable pipeline falls through to `return null`.
|
|
89
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
90
|
+
const mod = await _dynImport(pkg);
|
|
91
|
+
if (envModelCache()) {
|
|
92
|
+
if (mod.env) {
|
|
93
|
+
mod.env.cacheDir = envModelCache();
|
|
94
|
+
mod.env.localModelPath = envModelCache();
|
|
95
|
+
mod.env.allowRemoteModels = false;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
pipelineFn = mod.pipeline ?? mod.default?.pipeline;
|
|
99
|
+
}
|
|
100
|
+
catch (err) {
|
|
101
|
+
log.debug(`transformers import failed (${pkg}): ${err instanceof Error ? err.message : String(err)}`);
|
|
102
|
+
return null;
|
|
103
|
+
}
|
|
104
|
+
if (!pipelineFn)
|
|
105
|
+
return null;
|
|
106
|
+
// The offline bundle used in egress-blocked sandboxes ships only the FP32 model, so use whichever file is on disk.
|
|
107
|
+
const cacheRoot = envModelCache()?.trim();
|
|
108
|
+
const quantized = !cacheRoot
|
|
109
|
+
|| fs.existsSync(path.join(cacheRoot, model, 'onnx', 'model_quantized.onnx'));
|
|
110
|
+
try {
|
|
111
|
+
const instance = await pipelineFn('feature-extraction', model, { quantized });
|
|
112
|
+
_pipelineInstances.set(model, instance);
|
|
113
|
+
return instance;
|
|
114
|
+
}
|
|
115
|
+
catch (err) {
|
|
116
|
+
log.debug(`embedding pipeline load failed (${model}): ${err instanceof Error ? err.message : String(err)}`);
|
|
117
|
+
return null;
|
|
118
|
+
}
|
|
119
|
+
finally {
|
|
120
|
+
_pipelineLoading.delete(model);
|
|
121
|
+
}
|
|
122
|
+
})();
|
|
123
|
+
_pipelineLoading.set(model, loading);
|
|
124
|
+
return loading;
|
|
125
|
+
}
|
|
126
|
+
export function resolveEmbeddingModel(hippoRoot, explicitModel) {
|
|
127
|
+
const direct = explicitModel?.trim();
|
|
128
|
+
if (direct)
|
|
129
|
+
return direct;
|
|
130
|
+
try {
|
|
131
|
+
const configured = loadConfig(hippoRoot).embeddings.model?.trim();
|
|
132
|
+
if (configured)
|
|
133
|
+
return configured;
|
|
134
|
+
}
|
|
135
|
+
catch {
|
|
136
|
+
// Fall back to the default model when config cannot be read.
|
|
137
|
+
}
|
|
138
|
+
return DEFAULT_EMBEDDING_MODEL;
|
|
139
|
+
}
|
|
140
|
+
/** Embeds `text` with the local model, or returns `[]` when Transformers.js is missing or fails; `role` adds e5-style prefixes. */
|
|
141
|
+
export async function getEmbedding(text, model = DEFAULT_EMBEDDING_MODEL, role) {
|
|
142
|
+
if (!isEmbeddingAvailable())
|
|
143
|
+
return [];
|
|
144
|
+
try {
|
|
145
|
+
const pipe = await loadPipeline(model);
|
|
146
|
+
if (!pipe)
|
|
147
|
+
return [];
|
|
148
|
+
const prefix = prefixFor(model, role);
|
|
149
|
+
const input = prefix ? `${prefix}${text}` : text;
|
|
150
|
+
// SAFETY: pipe() is a Transformers.js feature-extraction pipeline call;
|
|
151
|
+
// its untyped output is read defensively below (only `.data`, cast on
|
|
152
|
+
// the return line to the documented Float32Array tensor shape).
|
|
153
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
154
|
+
const output = await pipe(input, { pooling: poolingFor(model), normalize: true });
|
|
155
|
+
// SAFETY: output.data is a Float32Array per the feature-extraction
|
|
156
|
+
// pipeline's documented tensor output shape.
|
|
157
|
+
return Array.from(output.data);
|
|
158
|
+
}
|
|
159
|
+
catch (err) {
|
|
160
|
+
// The caller sees `[]` and names the memory; the reason only shows at debug.
|
|
161
|
+
log.debug(`local embedding failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
162
|
+
return [];
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
//# sourceMappingURL=local-embedding.js.map
|
package/dist/log.d.ts
CHANGED
|
@@ -12,13 +12,20 @@ export declare function isLevelEnabled(level: LogLevel): boolean;
|
|
|
12
12
|
export declare function formatLogLine(level: LogLevel, message: string, fields?: LogFields): string;
|
|
13
13
|
/** Write `message` at `level` the first time `key` is seen in this process; later calls are dropped. */
|
|
14
14
|
declare function once(key: string, level: LogLevel, message: string, fields?: LogFields): void;
|
|
15
|
+
/** Warn the first time `key` is seen in this process, then log at debug, so a repeating failure stays findable without flooding stderr. */
|
|
16
|
+
declare function warnThenDebug(key: string, message: string, fields?: LogFields): void;
|
|
17
|
+
/** The class name and stack of a thrown value, as log fields; a non-Error throw has no stack. */
|
|
18
|
+
export declare function errorFields<E>(err: E): LogFields;
|
|
15
19
|
export declare const log: {
|
|
16
20
|
readonly error: (message: string, fields?: LogFields) => void;
|
|
17
21
|
readonly warn: (message: string, fields?: LogFields) => void;
|
|
18
22
|
readonly info: (message: string, fields?: LogFields) => void;
|
|
19
23
|
readonly debug: (message: string, fields?: LogFields) => void;
|
|
20
24
|
readonly once: typeof once;
|
|
25
|
+
readonly warnThenDebug: typeof warnThenDebug;
|
|
21
26
|
};
|
|
27
|
+
/** Message for a caught value of unknown shape. `cause` names the sanctioned unknown-input case (error-cause enrichment). */
|
|
28
|
+
export declare function errorMessage(cause: unknown): string;
|
|
22
29
|
/** Test hook: forget which once-keys have fired. */
|
|
23
30
|
export declare function resetLogOnce(): void;
|
|
24
31
|
export {};
|
package/dist/log.js
CHANGED
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
/** Leveled stderr logger. `HIPPO_LOG` picks the threshold (error, warn, info, debug); unset or unknown means warn. */
|
|
2
|
+
import { envLogLevel } from './env.js';
|
|
2
3
|
const RANK = { error: 0, warn: 1, info: 2, debug: 3 };
|
|
3
4
|
function isLogLevel(value) {
|
|
4
5
|
return Object.hasOwn(RANK, value);
|
|
5
6
|
}
|
|
6
7
|
/** The active threshold, read on every call so a test or a long-lived server can change it without a restart. */
|
|
7
8
|
export function logThreshold() {
|
|
8
|
-
const raw =
|
|
9
|
+
const raw = envLogLevel();
|
|
9
10
|
return isLogLevel(raw) ? raw : 'warn';
|
|
10
11
|
}
|
|
11
12
|
export function isLevelEnabled(level) {
|
|
@@ -34,13 +35,30 @@ function once(key, level, message, fields) {
|
|
|
34
35
|
onceKeys.add(key);
|
|
35
36
|
write(level, message, fields);
|
|
36
37
|
}
|
|
38
|
+
/** Warn the first time `key` is seen in this process, then log at debug, so a repeating failure stays findable without flooding stderr. */
|
|
39
|
+
function warnThenDebug(key, message, fields) {
|
|
40
|
+
const level = onceKeys.has(key) ? 'debug' : 'warn';
|
|
41
|
+
onceKeys.add(key);
|
|
42
|
+
write(level, message, fields);
|
|
43
|
+
}
|
|
44
|
+
/** The class name and stack of a thrown value, as log fields; a non-Error throw has no stack. */
|
|
45
|
+
export function errorFields(err) {
|
|
46
|
+
if (!(err instanceof Error))
|
|
47
|
+
return { errorClass: 'NonError' };
|
|
48
|
+
return { errorClass: err.constructor.name, stack: err.stack };
|
|
49
|
+
}
|
|
37
50
|
export const log = {
|
|
38
51
|
error: (message, fields) => write('error', message, fields),
|
|
39
52
|
warn: (message, fields) => write('warn', message, fields),
|
|
40
53
|
info: (message, fields) => write('info', message, fields),
|
|
41
54
|
debug: (message, fields) => write('debug', message, fields),
|
|
42
55
|
once,
|
|
56
|
+
warnThenDebug,
|
|
43
57
|
};
|
|
58
|
+
/** Message for a caught value of unknown shape. `cause` names the sanctioned unknown-input case (error-cause enrichment). */
|
|
59
|
+
export function errorMessage(cause) {
|
|
60
|
+
return cause instanceof Error ? cause.message : String(cause);
|
|
61
|
+
}
|
|
44
62
|
/** Test hook: forget which once-keys have fired. */
|
|
45
63
|
export function resetLogOnce() {
|
|
46
64
|
onceKeys.clear();
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { type ToolCall } from './protocol.js';
|
|
2
|
+
export declare function runPredictBaserateTool({ args, ctx, hippoRoot, tenantId }: ToolCall): string;
|
|
3
|
+
export declare function runStatusTool({ hippoRoot, config, tenantId }: ToolCall): string;
|
|
4
|
+
export declare function runConflictsTool({ hippoRoot, tenantId }: ToolCall): string;
|
|
5
|
+
export declare function runResolveTool({ args, ctx, hippoRoot, tenantId }: ToolCall): string;
|
|
6
|
+
export declare function runShareTool({ args, hippoRoot, tenantId }: ToolCall): string;
|
|
7
|
+
export declare function runPeersTool({ tenantId }: ToolCall): string;
|
|
8
|
+
//# sourceMappingURL=admin-tools.d.ts.map
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
// Store health and admin tool handlers: base rates, status, conflicts, resolve, share and peers.
|
|
2
|
+
import { calculateStrength } from '../memory.js';
|
|
3
|
+
import { evalNow } from '../ablation.js';
|
|
4
|
+
import { loadStrengthRows } from '../store/candidates.js';
|
|
5
|
+
import { listMemoryConflicts, resolveConflict } from '../store/conflicts.js';
|
|
6
|
+
import { shareMemory, listPeers } from '../shared.js';
|
|
7
|
+
import { computePredictionBaserate } from '../predictions/store.js';
|
|
8
|
+
import { isJsonString } from './protocol.js';
|
|
9
|
+
export function runPredictBaserateTool({ args, ctx, hippoRoot, tenantId }) {
|
|
10
|
+
// J3 reference-class / planning-fallacy detector. Reads from the E2
|
|
11
|
+
// predictions table; returns text-only response matching the existing
|
|
12
|
+
// MCP tool convention (no structured JSON over the wire). Direct call
|
|
13
|
+
// to computePredictionBaserate; helper opens its own db + emits audit
|
|
14
|
+
// (single source of truth, no caller-site drift).
|
|
15
|
+
const classTag = String(args.class_tag || '').trim();
|
|
16
|
+
if (!classTag)
|
|
17
|
+
return 'No class_tag provided. Usage: pass class_tag matching a class used in past predictions (e.g. "migration-effort").';
|
|
18
|
+
const baserate = computePredictionBaserate(hippoRoot, tenantId, classTag, ctx?.actor ?? 'mcp');
|
|
19
|
+
if (baserate.nClosed === 0) {
|
|
20
|
+
return `No closed predictions in class "${classTag}" yet. Create one via hippo_predict (or 'hippo predict ...' CLI) and close it with hippo_predict_close once the actual outcome is known. Base rates need closed predictions with numeric actual_value to compute.`;
|
|
21
|
+
}
|
|
22
|
+
const lines = [baserate.summary, ''];
|
|
23
|
+
lines.push(`n_closed: ${baserate.nClosed}`);
|
|
24
|
+
lines.push(`n_ratio_eligible: ${baserate.nRatioEligible}`);
|
|
25
|
+
if (baserate.meanEstimate !== null)
|
|
26
|
+
lines.push(`mean_estimate: ${baserate.meanEstimate.toFixed(3)}`);
|
|
27
|
+
if (baserate.meanActual !== null)
|
|
28
|
+
lines.push(`mean_actual: ${baserate.meanActual.toFixed(3)}`);
|
|
29
|
+
if (baserate.meanRatio !== null)
|
|
30
|
+
lines.push(`mean_ratio: ${baserate.meanRatio.toFixed(3)}x`);
|
|
31
|
+
if (baserate.p50Ratio !== null)
|
|
32
|
+
lines.push(`p50_ratio: ${baserate.p50Ratio.toFixed(3)}x`);
|
|
33
|
+
if (baserate.mae !== null)
|
|
34
|
+
lines.push(`mae: ${baserate.mae.toFixed(3)}`);
|
|
35
|
+
return lines.join('\n');
|
|
36
|
+
}
|
|
37
|
+
export function runStatusTool({ hippoRoot, config, tenantId }) {
|
|
38
|
+
// Every row counts toward the averages, so this scans the store, but without its text.
|
|
39
|
+
const entries = loadStrengthRows(hippoRoot, tenantId);
|
|
40
|
+
const now = evalNow(); // honors HIPPO_FAKE_NOW (eval-only; see ablation.ts)
|
|
41
|
+
let atRisk = 0;
|
|
42
|
+
let totalStrength = 0;
|
|
43
|
+
for (const e of entries) {
|
|
44
|
+
const s = calculateStrength(e, now);
|
|
45
|
+
totalStrength += s;
|
|
46
|
+
if (s < 0.1 && !e.pinned)
|
|
47
|
+
atRisk++;
|
|
48
|
+
}
|
|
49
|
+
const avgStrength = entries.length > 0 ? (totalStrength / entries.length).toFixed(2) : '0';
|
|
50
|
+
const pinned = entries.filter((e) => e.pinned).length;
|
|
51
|
+
const errors = entries.filter((e) => e.tags.includes('error')).length;
|
|
52
|
+
const conflicts = listMemoryConflicts(hippoRoot, 'open', tenantId).length;
|
|
53
|
+
return [
|
|
54
|
+
`Memories: ${entries.length} (${pinned} pinned, ${errors} errors)`,
|
|
55
|
+
`Avg strength: ${avgStrength}`,
|
|
56
|
+
`At risk (<0.1): ${atRisk}`,
|
|
57
|
+
`Open conflicts: ${conflicts}`,
|
|
58
|
+
`Half-life default: ${config.defaultHalfLifeDays}d`,
|
|
59
|
+
].join('\n');
|
|
60
|
+
}
|
|
61
|
+
export function runConflictsTool({ hippoRoot, tenantId }) {
|
|
62
|
+
const conflicts = listMemoryConflicts(hippoRoot, 'open', tenantId);
|
|
63
|
+
if (conflicts.length === 0)
|
|
64
|
+
return 'No open conflicts.';
|
|
65
|
+
return conflicts.map((c) => `conflict_${c.id}: ${c.memory_a_id} <-> ${c.memory_b_id} (score=${c.score.toFixed(2)}) — ${c.reason}`).join('\n');
|
|
66
|
+
}
|
|
67
|
+
export function runResolveTool({ args, ctx, hippoRoot, tenantId }) {
|
|
68
|
+
const conflictId = Number(args.conflict_id);
|
|
69
|
+
const keepId = String(args.keep || '');
|
|
70
|
+
const forget = Boolean(args.forget);
|
|
71
|
+
// AT1: optional rejectLoser + reason, threaded straight through to
|
|
72
|
+
// resolveConflict's opts (plan §5 — mirrors the CLI's --reject-loser).
|
|
73
|
+
const rejectLoser = Boolean(args.rejectLoser);
|
|
74
|
+
const reason = isJsonString(args.reason) ? args.reason : undefined;
|
|
75
|
+
if (isNaN(conflictId) || !keepId)
|
|
76
|
+
return 'Required: conflict_id and keep.';
|
|
77
|
+
const result = resolveConflict(hippoRoot, conflictId, keepId, forget, tenantId, {
|
|
78
|
+
rejectLoserValue: rejectLoser,
|
|
79
|
+
reason,
|
|
80
|
+
// P2 fix: resolveConflict's opts.rejectedBy defaults to 'cli' when
|
|
81
|
+
// omitted — this call site never passed it, so the tombstone's
|
|
82
|
+
// rejected_by AND the conflict_resolve audit's actor both landed as
|
|
83
|
+
// 'cli' even though the caller was MCP. ctx.actor carries the
|
|
84
|
+
// auth-resolved actor for HTTP-MCP (see McpContext above); stdio
|
|
85
|
+
// callers pass no ctx, so 'mcp' is the honest fallback there.
|
|
86
|
+
rejectedBy: ctx?.actor ?? 'mcp',
|
|
87
|
+
});
|
|
88
|
+
if (!result)
|
|
89
|
+
return 'Could not resolve. Check the conflict ID and --keep value.';
|
|
90
|
+
const action = rejectLoser ? 'rejected (tombstoned) and removed' : forget ? 'deleted' : 'weakened';
|
|
91
|
+
return `Resolved conflict ${conflictId}: kept ${keepId}, ${action} ${result.loserId}`;
|
|
92
|
+
}
|
|
93
|
+
export function runShareTool({ args, hippoRoot, tenantId }) {
|
|
94
|
+
const shareId = String(args.id || '');
|
|
95
|
+
if (!shareId)
|
|
96
|
+
return 'Required: id (memory ID to share).';
|
|
97
|
+
const force = Boolean(args.force);
|
|
98
|
+
// Pass tenantId so shareMemory's readEntry filters by tenant. Without
|
|
99
|
+
// this, a Bearer for tenant A could call hippo_share with tenant B's
|
|
100
|
+
// id and copy the row to the global store. The 'Memory not found'
|
|
101
|
+
// error matches the cross-tenant deny shape elsewhere in the code.
|
|
102
|
+
const shared = shareMemory(hippoRoot, shareId, { force, tenantId });
|
|
103
|
+
if (!shared)
|
|
104
|
+
return 'Transfer score too low. Use force=true to override.';
|
|
105
|
+
return `Shared [${shared.id}] to global store. Source: ${shared.source}`;
|
|
106
|
+
}
|
|
107
|
+
export function runPeersTool({ tenantId }) {
|
|
108
|
+
// D4 v1.12.10: tenant-scope the cross-project peer discovery.
|
|
109
|
+
// tenantId is the caller's tenant (matches hippo_share above);
|
|
110
|
+
// passing undefined would restore the pre-D4 host-wide behaviour.
|
|
111
|
+
const peers = listPeers(undefined, tenantId);
|
|
112
|
+
if (peers.length === 0)
|
|
113
|
+
return 'No peers found.';
|
|
114
|
+
return peers.map((p) => `${p.project}: ${p.count} memories (latest: ${p.latest.slice(0, 10)})`).join('\n');
|
|
115
|
+
}
|
|
116
|
+
//# sourceMappingURL=admin-tools.js.map
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { SearchResult } from '../search/types.js';
|
|
2
|
+
import type { SessionEvent, TaskSnapshot } from '../store/rows.js';
|
|
3
|
+
import type { ContextCost, ContinuityBlock, RecallResult, RecallResultItem } from '../api.js';
|
|
4
|
+
import { type SessionHandoff } from '../handoff.js';
|
|
5
|
+
import { detectAnchoring } from '../recall-history.js';
|
|
6
|
+
import { detectAvailabilityBias } from '../availability.js';
|
|
7
|
+
export declare function formatContinuityBlock(block: ContinuityBlock): string;
|
|
8
|
+
export declare function formatMemories(results: ReadonlyArray<Pick<SearchResult, 'entry'>>): string;
|
|
9
|
+
export interface RenderedRecall {
|
|
10
|
+
anchoring: ReturnType<typeof detectAnchoring>;
|
|
11
|
+
availability: ReturnType<typeof detectAvailabilityBias>;
|
|
12
|
+
text: string;
|
|
13
|
+
list: SearchResult[];
|
|
14
|
+
}
|
|
15
|
+
export interface RenderSlot {
|
|
16
|
+
rendered?: RenderedRecall;
|
|
17
|
+
}
|
|
18
|
+
/** What a memory costs the budget: the text formatMemories prints for it. */
|
|
19
|
+
export declare const memoryCost: (r: Pick<SearchResult, "entry">) => number;
|
|
20
|
+
export declare function memoriesReserve(budget: number): number;
|
|
21
|
+
export declare function snapshotPiece(s: TaskSnapshot): string;
|
|
22
|
+
export declare function handoffPiece(h: SessionHandoff): string;
|
|
23
|
+
export declare function trailPiece(events: readonly SessionEvent[]): string;
|
|
24
|
+
export declare const contextCost: ContextCost;
|
|
25
|
+
export declare function tailSection(rows: RecallResultItem[]): string;
|
|
26
|
+
export declare function planningSection(r: RecallResult): string;
|
|
27
|
+
//# sourceMappingURL=format.d.ts.map
|