hippo-memory 1.60.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 -1262
- package/dist/api.js +25 -2727
- package/dist/audit.d.ts +3 -0
- package/dist/audit.js +6 -3
- package/dist/auth.d.ts +45 -4
- package/dist/auth.js +125 -48
- package/dist/autolearn.js +2 -2
- 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 +71 -120
- package/dist/cli.js +170 -8469
- package/dist/client.js +15 -8
- package/dist/compaction-record.js +6 -4
- package/dist/connectors/github/backfill.js +94 -87
- package/dist/connectors/github/cli-impl.js +4 -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 +6 -5
- 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 +228 -202
- 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 -3049
- package/dist/decisions.d.ts +4 -1
- package/dist/decisions.js +9 -7
- package/dist/dedupe.js +3 -2
- package/dist/delivery-recorder.js +4 -1
- package/dist/doctor.js +3 -3
- package/dist/embedding-provider.d.ts +1 -1
- package/dist/embedding-provider.js +4 -3
- package/dist/embeddings.d.ts +9 -52
- package/dist/embeddings.js +43 -297
- 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 +1 -1
- 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} +6 -384
- 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/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 +7 -5
- package/dist/index.d.ts +25 -6
- package/dist/index.js +23 -6
- package/dist/invalidation.js +2 -1
- package/dist/judgment.js +2 -1
- 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 -75
- package/dist/mcp/server.js +7 -1190
- 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 +3 -0
- 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 +7 -5
- package/dist/project-briefs.d.ts +3 -0
- package/dist/project-briefs.js +7 -5
- package/dist/project-identity.js +3 -2
- package/dist/project-merge.js +3 -1
- package/dist/quarantine.d.ts +2 -1
- package/dist/quarantine.js +8 -5
- 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 +1 -1
- package/dist/refine-llm.js +2 -1
- package/dist/reject-flow.js +6 -1
- package/dist/rerankers/clef.js +6 -5
- package/dist/rerankers/jev.d.ts +1 -1
- package/dist/rerankers/jev.js +4 -4
- package/dist/rerankers/llm.d.ts +4 -2
- package/dist/rerankers/llm.js +58 -38
- package/dist/rerankers/types.d.ts +1 -1
- package/dist/salience.js +1 -1
- package/dist/scheduler.d.ts +1 -0
- package/dist/scheduler.js +26 -4
- 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 +2 -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 +69 -2362
- 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 +26 -22
- package/dist/skills.d.ts +3 -0
- package/dist/skills.js +7 -5
- package/dist/stdin.js +2 -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/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 +1 -1
- package/dist/capture.d.ts +0 -155
- package/dist/capture.js +0 -1295
- package/dist/consolidate.d.ts +0 -58
- package/dist/consolidate.js +0 -1124
- package/dist/graph.d.ts +0 -245
- package/dist/hooks.d.ts +0 -208
- package/dist/hooks.js +0 -1076
- package/dist/importers.js +0 -900
- package/dist/predictions.js +0 -620
- package/dist/search.d.ts +0 -320
- package/dist/search.js +0 -970
- package/dist/store.d.ts +0 -776
- package/dist/store.js +0 -3473
- 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,178 @@
|
|
|
1
|
+
import { Layer, type MemoryEntry, type ConfidenceLevel } from '../memory.js';
|
|
2
|
+
/** A value that round-trips through JSON.stringify/JSON.parse unchanged. */
|
|
3
|
+
export type JsonValue = string | number | boolean | null | JsonValue[] | {
|
|
4
|
+
[key: string]: JsonValue;
|
|
5
|
+
};
|
|
6
|
+
export interface IndexEntry {
|
|
7
|
+
id: string;
|
|
8
|
+
file: string;
|
|
9
|
+
layer: Layer;
|
|
10
|
+
strength: number;
|
|
11
|
+
tags: string[];
|
|
12
|
+
created: string;
|
|
13
|
+
last_retrieved: string;
|
|
14
|
+
pinned: boolean;
|
|
15
|
+
}
|
|
16
|
+
export interface HippoIndex {
|
|
17
|
+
version: number;
|
|
18
|
+
entries: Record<string, IndexEntry>;
|
|
19
|
+
last_retrieval_ids: string[];
|
|
20
|
+
/** LC1 (docs/plans/2026-08-02-lc1-recall-trace-persistence.md): id of the
|
|
21
|
+
* most recent recall_traces row written by getContext/cmdRecall, mirrored
|
|
22
|
+
* from the `last_trace_id` meta key exactly like last_retrieval_ids. null
|
|
23
|
+
* when no trace has been written yet (fresh store, pre-v40 flow, or
|
|
24
|
+
* api.recall-only usage — api.recall never sets this). */
|
|
25
|
+
last_trace_id: string | null;
|
|
26
|
+
}
|
|
27
|
+
export interface MemoryRow {
|
|
28
|
+
id: string;
|
|
29
|
+
created: string;
|
|
30
|
+
last_retrieved: string;
|
|
31
|
+
retrieval_count: number;
|
|
32
|
+
strength: number;
|
|
33
|
+
half_life_days: number;
|
|
34
|
+
layer: string;
|
|
35
|
+
tags_json: string;
|
|
36
|
+
emotional_valence: MemoryEntry['emotional_valence'];
|
|
37
|
+
schema_fit: number;
|
|
38
|
+
source: string;
|
|
39
|
+
outcome_score: number | null;
|
|
40
|
+
outcome_positive: number;
|
|
41
|
+
outcome_negative: number;
|
|
42
|
+
conflicts_with_json: string;
|
|
43
|
+
pinned: number;
|
|
44
|
+
confidence: ConfidenceLevel;
|
|
45
|
+
content: string;
|
|
46
|
+
parents_json: string;
|
|
47
|
+
starred: number;
|
|
48
|
+
trace_outcome: MemoryEntry['trace_outcome'];
|
|
49
|
+
source_session_id: string | null;
|
|
50
|
+
valid_from: string | null;
|
|
51
|
+
superseded_by: string | null;
|
|
52
|
+
extracted_from: string | null;
|
|
53
|
+
dag_level: number;
|
|
54
|
+
dag_parent_id: string | null;
|
|
55
|
+
kind: string | null;
|
|
56
|
+
scope: string | null;
|
|
57
|
+
owner: string | null;
|
|
58
|
+
artifact_ref: string | null;
|
|
59
|
+
tenant_id: string | null;
|
|
60
|
+
origin_project: string | null;
|
|
61
|
+
descendant_count: number | null;
|
|
62
|
+
earliest_at: string | null;
|
|
63
|
+
latest_at: string | null;
|
|
64
|
+
summary_dirty: number | null;
|
|
65
|
+
last_rebuilt_at: string | null;
|
|
66
|
+
rebuild_count: number | null;
|
|
67
|
+
dag_level_3_built_at: string | null;
|
|
68
|
+
bm25_score?: number;
|
|
69
|
+
}
|
|
70
|
+
export interface ConsolidationRunRow {
|
|
71
|
+
timestamp: string;
|
|
72
|
+
decayed: number;
|
|
73
|
+
merged: number;
|
|
74
|
+
removed: number;
|
|
75
|
+
}
|
|
76
|
+
export interface TaskSnapshotRow {
|
|
77
|
+
id: number;
|
|
78
|
+
task: string;
|
|
79
|
+
summary: string;
|
|
80
|
+
next_step: string;
|
|
81
|
+
status: string;
|
|
82
|
+
source: string;
|
|
83
|
+
session_id: string | null;
|
|
84
|
+
scope: string | null;
|
|
85
|
+
created_at: string;
|
|
86
|
+
updated_at: string;
|
|
87
|
+
}
|
|
88
|
+
export interface MemoryConflictRow {
|
|
89
|
+
id: number;
|
|
90
|
+
memory_a_id: string;
|
|
91
|
+
memory_b_id: string;
|
|
92
|
+
reason: string;
|
|
93
|
+
score: number;
|
|
94
|
+
status: string;
|
|
95
|
+
detected_at: string;
|
|
96
|
+
updated_at: string;
|
|
97
|
+
}
|
|
98
|
+
export interface SessionEventRow {
|
|
99
|
+
id: number;
|
|
100
|
+
session_id: string;
|
|
101
|
+
task: string | null;
|
|
102
|
+
event_type: string;
|
|
103
|
+
content: string;
|
|
104
|
+
source: string;
|
|
105
|
+
scope: string | null;
|
|
106
|
+
metadata_json: string;
|
|
107
|
+
created_at: string;
|
|
108
|
+
}
|
|
109
|
+
export interface TaskSnapshot {
|
|
110
|
+
id: number;
|
|
111
|
+
task: string;
|
|
112
|
+
summary: string;
|
|
113
|
+
next_step: string;
|
|
114
|
+
status: string;
|
|
115
|
+
source: string;
|
|
116
|
+
session_id: string | null;
|
|
117
|
+
scope: string | null;
|
|
118
|
+
created_at: string;
|
|
119
|
+
updated_at: string;
|
|
120
|
+
}
|
|
121
|
+
export interface MemoryConflict {
|
|
122
|
+
id: number;
|
|
123
|
+
memory_a_id: string;
|
|
124
|
+
memory_b_id: string;
|
|
125
|
+
reason: string;
|
|
126
|
+
score: number;
|
|
127
|
+
status: string;
|
|
128
|
+
detected_at: string;
|
|
129
|
+
updated_at: string;
|
|
130
|
+
}
|
|
131
|
+
export interface SessionEvent {
|
|
132
|
+
id: number;
|
|
133
|
+
session_id: string;
|
|
134
|
+
task: string | null;
|
|
135
|
+
event_type: string;
|
|
136
|
+
content: string;
|
|
137
|
+
source: string;
|
|
138
|
+
scope: string | null;
|
|
139
|
+
metadata: Record<string, JsonValue>;
|
|
140
|
+
created_at: string;
|
|
141
|
+
}
|
|
142
|
+
export declare const INDEX_VERSION = 3;
|
|
143
|
+
export declare const MEMORY_SELECT_COLUMNS = "id, created, last_retrieved, retrieval_count, strength, half_life_days, layer, tags_json, emotional_valence, schema_fit, source, outcome_score, outcome_positive, outcome_negative, conflicts_with_json, pinned, confidence, content, parents_json, starred, trace_outcome, source_session_id, valid_from, superseded_by, extracted_from, dag_level, dag_parent_id, kind, scope, owner, artifact_ref, tenant_id, origin_project, descendant_count, earliest_at, latest_at, summary_dirty, last_rebuilt_at, rebuild_count, dag_level_3_built_at";
|
|
144
|
+
export declare const MEMORY_SEARCH_COLUMNS = "m.id AS id, m.created AS created, m.last_retrieved AS last_retrieved, m.retrieval_count AS retrieval_count, m.strength AS strength, m.half_life_days AS half_life_days, m.layer AS layer, m.tags_json AS tags_json, m.emotional_valence AS emotional_valence, m.schema_fit AS schema_fit, m.source AS source, m.outcome_score AS outcome_score, m.outcome_positive AS outcome_positive, m.outcome_negative AS outcome_negative, m.conflicts_with_json AS conflicts_with_json, m.pinned AS pinned, m.confidence AS confidence, m.content AS content, m.parents_json AS parents_json, m.starred AS starred, m.trace_outcome AS trace_outcome, m.source_session_id AS source_session_id, m.valid_from AS valid_from, m.superseded_by AS superseded_by, m.extracted_from AS extracted_from, m.dag_level AS dag_level, m.dag_parent_id AS dag_parent_id, m.kind AS kind, m.scope AS scope, m.owner AS owner, m.artifact_ref AS artifact_ref, m.tenant_id AS tenant_id, m.origin_project AS origin_project, m.descendant_count AS descendant_count, m.earliest_at AS earliest_at, m.latest_at AS latest_at, m.summary_dirty AS summary_dirty, m.last_rebuilt_at AS last_rebuilt_at, m.rebuild_count AS rebuild_count, m.dag_level_3_built_at AS dag_level_3_built_at, bm25(memories_fts) AS bm25_score";
|
|
145
|
+
/**
|
|
146
|
+
* Default candidate-pool size for `loadSearchEntries` when called with
|
|
147
|
+
* `limit === undefined`. Single source of truth; `api.recall` imports
|
|
148
|
+
* this for `RecallResult.windowSize` reporting so the two cannot drift.
|
|
149
|
+
*/
|
|
150
|
+
export declare const DEFAULT_SEARCH_CANDIDATE_LIMIT = 200;
|
|
151
|
+
export declare function rowToEntry(row: MemoryRow): MemoryEntry;
|
|
152
|
+
export declare function parseJsonArray(raw: string | null | undefined): string[];
|
|
153
|
+
/**
|
|
154
|
+
* Strict parse for the `last_trace_id` meta value (LC1 F1(d) structural
|
|
155
|
+
* fix). A bare Number(raw) would turn '', whitespace, or garbage into a
|
|
156
|
+
* usable-looking 0/NaN — a consumer INSERTing recall_trace_outcomes with
|
|
157
|
+
* trace_id=0 would hit a masked FK violation (row id 0 never exists).
|
|
158
|
+
* Require a clean positive integer string; anything else is treated as
|
|
159
|
+
* unset. This is the ONE place that decides "clean" — every consumer of
|
|
160
|
+
* `HippoIndex.last_trace_id` (outcomeForLastRecall, tests) reads the
|
|
161
|
+
* already-validated value out of `buildIndexFromDb`'s result and never
|
|
162
|
+
* re-parses the raw meta string itself.
|
|
163
|
+
*/
|
|
164
|
+
export declare function parseLastTraceId(raw: string | null | undefined): string | null;
|
|
165
|
+
export declare function isPlainJsonObject(x: JsonValue): x is Record<string, JsonValue>;
|
|
166
|
+
export declare function rowToTaskSnapshot(row: TaskSnapshotRow): TaskSnapshot;
|
|
167
|
+
export declare function rowToMemoryConflict(row: MemoryConflictRow): MemoryConflict;
|
|
168
|
+
export declare function rowToSessionEvent(row: SessionEventRow): SessionEvent;
|
|
169
|
+
/** Named field set for the legacy `stats.json` mirror — the only fields any
|
|
170
|
+
* caller reads (see loadLegacyStatsFile's callers below). */
|
|
171
|
+
export interface LegacyStats {
|
|
172
|
+
[key: string]: JsonValue;
|
|
173
|
+
total_remembered: JsonValue;
|
|
174
|
+
total_recalled: JsonValue;
|
|
175
|
+
total_forgotten: JsonValue;
|
|
176
|
+
consolidation_runs: JsonValue;
|
|
177
|
+
}
|
|
178
|
+
//# sourceMappingURL=rows.d.ts.map
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
import { log } from '../log.js';
|
|
2
|
+
export const INDEX_VERSION = 3;
|
|
3
|
+
export const MEMORY_SELECT_COLUMNS = `id, created, last_retrieved, retrieval_count, strength, half_life_days, layer, tags_json, emotional_valence, schema_fit, source, outcome_score, outcome_positive, outcome_negative, conflicts_with_json, pinned, confidence, content, parents_json, starred, trace_outcome, source_session_id, valid_from, superseded_by, extracted_from, dag_level, dag_parent_id, kind, scope, owner, artifact_ref, tenant_id, origin_project, descendant_count, earliest_at, latest_at, summary_dirty, last_rebuilt_at, rebuild_count, dag_level_3_built_at`;
|
|
4
|
+
// F1 (v1.7.0): qualified-and-aliased columns for the FTS join in
|
|
5
|
+
// loadSearchRows. Every column is `m.<col> AS <col>` so rowToEntry's
|
|
6
|
+
// unqualified field reads keep working unchanged. The trailing
|
|
7
|
+
// bm25(memories_fts) AS bm25_score adds the FTS rank as a result column.
|
|
8
|
+
// Only used inside the FTS path; non-FTS paths keep MEMORY_SELECT_COLUMNS.
|
|
9
|
+
export const MEMORY_SEARCH_COLUMNS = `m.id AS id, m.created AS created, m.last_retrieved AS last_retrieved, m.retrieval_count AS retrieval_count, m.strength AS strength, m.half_life_days AS half_life_days, m.layer AS layer, m.tags_json AS tags_json, m.emotional_valence AS emotional_valence, m.schema_fit AS schema_fit, m.source AS source, m.outcome_score AS outcome_score, m.outcome_positive AS outcome_positive, m.outcome_negative AS outcome_negative, m.conflicts_with_json AS conflicts_with_json, m.pinned AS pinned, m.confidence AS confidence, m.content AS content, m.parents_json AS parents_json, m.starred AS starred, m.trace_outcome AS trace_outcome, m.source_session_id AS source_session_id, m.valid_from AS valid_from, m.superseded_by AS superseded_by, m.extracted_from AS extracted_from, m.dag_level AS dag_level, m.dag_parent_id AS dag_parent_id, m.kind AS kind, m.scope AS scope, m.owner AS owner, m.artifact_ref AS artifact_ref, m.tenant_id AS tenant_id, m.origin_project AS origin_project, m.descendant_count AS descendant_count, m.earliest_at AS earliest_at, m.latest_at AS latest_at, m.summary_dirty AS summary_dirty, m.last_rebuilt_at AS last_rebuilt_at, m.rebuild_count AS rebuild_count, m.dag_level_3_built_at AS dag_level_3_built_at, bm25(memories_fts) AS bm25_score`;
|
|
10
|
+
/**
|
|
11
|
+
* Default candidate-pool size for `loadSearchEntries` when called with
|
|
12
|
+
* `limit === undefined`. Single source of truth; `api.recall` imports
|
|
13
|
+
* this for `RecallResult.windowSize` reporting so the two cannot drift.
|
|
14
|
+
*/
|
|
15
|
+
export const DEFAULT_SEARCH_CANDIDATE_LIMIT = 200;
|
|
16
|
+
export function rowToEntry(row) {
|
|
17
|
+
// SAFETY: every `as X` below narrows a SQLite column value to an
|
|
18
|
+
// enum/union member of MemoryEntry; `row` comes from MEMORY_SELECT_COLUMNS
|
|
19
|
+
// / MEMORY_SEARCH_COLUMNS, which are the only queries producing MemoryRow,
|
|
20
|
+
// and the DB layer only ever writes these columns from the same enums.
|
|
21
|
+
const entry = {
|
|
22
|
+
id: row.id,
|
|
23
|
+
created: row.created,
|
|
24
|
+
last_retrieved: row.last_retrieved,
|
|
25
|
+
retrieval_count: Number(row.retrieval_count ?? 0),
|
|
26
|
+
strength: Number(row.strength ?? 1),
|
|
27
|
+
half_life_days: Number(row.half_life_days ?? 7),
|
|
28
|
+
layer: row.layer,
|
|
29
|
+
tags: parseJsonArray(row.tags_json),
|
|
30
|
+
emotional_valence: row.emotional_valence ?? 'neutral',
|
|
31
|
+
schema_fit: Number(row.schema_fit ?? 0.5),
|
|
32
|
+
source: row.source ?? 'cli',
|
|
33
|
+
outcome_score: row.outcome_score === null || row.outcome_score === undefined ? null : Number(row.outcome_score),
|
|
34
|
+
outcome_positive: Number(row.outcome_positive ?? 0),
|
|
35
|
+
outcome_negative: Number(row.outcome_negative ?? 0),
|
|
36
|
+
conflicts_with: parseJsonArray(row.conflicts_with_json),
|
|
37
|
+
pinned: Boolean(row.pinned),
|
|
38
|
+
confidence: row.confidence ?? 'observed',
|
|
39
|
+
content: row.content,
|
|
40
|
+
parents: parseJsonArray(row.parents_json),
|
|
41
|
+
starred: Boolean(row.starred),
|
|
42
|
+
trace_outcome: row.trace_outcome ?? null,
|
|
43
|
+
source_session_id: row.source_session_id ?? null,
|
|
44
|
+
valid_from: row.valid_from ?? row.created,
|
|
45
|
+
superseded_by: row.superseded_by ?? null,
|
|
46
|
+
extracted_from: row.extracted_from ?? null,
|
|
47
|
+
dag_level: Number(row.dag_level ?? 0),
|
|
48
|
+
dag_parent_id: row.dag_parent_id ?? null,
|
|
49
|
+
kind: (row.kind ?? 'distilled'),
|
|
50
|
+
scope: row.scope ?? null,
|
|
51
|
+
owner: row.owner ?? null,
|
|
52
|
+
artifact_ref: row.artifact_ref ?? null,
|
|
53
|
+
tenantId: row.tenant_id ?? 'default',
|
|
54
|
+
origin_project: row.origin_project ?? null,
|
|
55
|
+
descendant_count: Number(row.descendant_count ?? 0),
|
|
56
|
+
earliest_at: row.earliest_at ?? null,
|
|
57
|
+
latest_at: row.latest_at ?? null,
|
|
58
|
+
// v0.30 / E1 of DAG live-coupling (schema v28). Symmetric with v25 cache.
|
|
59
|
+
summary_dirty: (Number(row.summary_dirty ?? 0) === 1 ? 1 : 0),
|
|
60
|
+
last_rebuilt_at: row.last_rebuilt_at ?? null,
|
|
61
|
+
rebuild_count: Number(row.rebuild_count ?? 0),
|
|
62
|
+
dag_level_3_built_at: row.dag_level_3_built_at ?? null,
|
|
63
|
+
};
|
|
64
|
+
// F1 (v1.7.0): preserve bm25_score from the FTS path. `'bm25_score' in row`
|
|
65
|
+
// distinguishes "absent column" (non-FTS path) from "column present but
|
|
66
|
+
// value 0" — though FTS5 bm25() never returns 0, this is defensive.
|
|
67
|
+
if ('bm25_score' in row && row.bm25_score !== undefined && row.bm25_score !== null) {
|
|
68
|
+
entry.bm25_score = Number(row.bm25_score);
|
|
69
|
+
}
|
|
70
|
+
return entry;
|
|
71
|
+
}
|
|
72
|
+
export function parseJsonArray(raw) {
|
|
73
|
+
if (!raw)
|
|
74
|
+
return [];
|
|
75
|
+
try {
|
|
76
|
+
const parsed = JSON.parse(raw);
|
|
77
|
+
return Array.isArray(parsed) ? parsed.map((item) => String(item)) : [];
|
|
78
|
+
}
|
|
79
|
+
catch (err) {
|
|
80
|
+
log.debug(`store: corrupt JSON array column read as empty: ${err instanceof Error ? err.message : String(err)}`);
|
|
81
|
+
return [];
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Strict parse for the `last_trace_id` meta value (LC1 F1(d) structural
|
|
86
|
+
* fix). A bare Number(raw) would turn '', whitespace, or garbage into a
|
|
87
|
+
* usable-looking 0/NaN — a consumer INSERTing recall_trace_outcomes with
|
|
88
|
+
* trace_id=0 would hit a masked FK violation (row id 0 never exists).
|
|
89
|
+
* Require a clean positive integer string; anything else is treated as
|
|
90
|
+
* unset. This is the ONE place that decides "clean" — every consumer of
|
|
91
|
+
* `HippoIndex.last_trace_id` (outcomeForLastRecall, tests) reads the
|
|
92
|
+
* already-validated value out of `buildIndexFromDb`'s result and never
|
|
93
|
+
* re-parses the raw meta string itself.
|
|
94
|
+
*/
|
|
95
|
+
export function parseLastTraceId(raw) {
|
|
96
|
+
const trimmed = (raw ?? '').trim();
|
|
97
|
+
if (!/^\d+$/.test(trimmed) || Number(trimmed) <= 0)
|
|
98
|
+
return null;
|
|
99
|
+
return trimmed;
|
|
100
|
+
}
|
|
101
|
+
export function isPlainJsonObject(x) {
|
|
102
|
+
return x !== null && typeof x === 'object' && !Array.isArray(x);
|
|
103
|
+
}
|
|
104
|
+
function parseJsonObject(raw) {
|
|
105
|
+
if (!raw)
|
|
106
|
+
return {};
|
|
107
|
+
try {
|
|
108
|
+
const parsed = JSON.parse(raw);
|
|
109
|
+
if (isPlainJsonObject(parsed)) {
|
|
110
|
+
return parsed;
|
|
111
|
+
}
|
|
112
|
+
return {};
|
|
113
|
+
}
|
|
114
|
+
catch (err) {
|
|
115
|
+
log.debug(`store: corrupt JSON object column read as empty: ${err instanceof Error ? err.message : String(err)}`);
|
|
116
|
+
return {};
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
export function rowToTaskSnapshot(row) {
|
|
120
|
+
return {
|
|
121
|
+
id: Number(row.id),
|
|
122
|
+
task: row.task,
|
|
123
|
+
summary: row.summary,
|
|
124
|
+
next_step: row.next_step,
|
|
125
|
+
status: row.status,
|
|
126
|
+
source: row.source,
|
|
127
|
+
session_id: row.session_id ?? null,
|
|
128
|
+
scope: row.scope ?? null,
|
|
129
|
+
created_at: row.created_at,
|
|
130
|
+
updated_at: row.updated_at,
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
export function rowToMemoryConflict(row) {
|
|
134
|
+
return {
|
|
135
|
+
id: Number(row.id),
|
|
136
|
+
memory_a_id: row.memory_a_id,
|
|
137
|
+
memory_b_id: row.memory_b_id,
|
|
138
|
+
reason: row.reason,
|
|
139
|
+
score: Number(row.score ?? 0),
|
|
140
|
+
status: row.status,
|
|
141
|
+
detected_at: row.detected_at,
|
|
142
|
+
updated_at: row.updated_at,
|
|
143
|
+
};
|
|
144
|
+
}
|
|
145
|
+
export function rowToSessionEvent(row) {
|
|
146
|
+
return {
|
|
147
|
+
id: Number(row.id),
|
|
148
|
+
session_id: row.session_id,
|
|
149
|
+
task: row.task ?? null,
|
|
150
|
+
event_type: row.event_type,
|
|
151
|
+
content: row.content,
|
|
152
|
+
source: row.source,
|
|
153
|
+
scope: row.scope ?? null,
|
|
154
|
+
metadata: parseJsonObject(row.metadata_json),
|
|
155
|
+
created_at: row.created_at,
|
|
156
|
+
};
|
|
157
|
+
}
|
|
158
|
+
//# sourceMappingURL=rows.js.map
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import type { MemoryEntry } from '../memory.js';
|
|
2
|
+
import { type DatabaseSyncLike } from '../db.js';
|
|
3
|
+
/**
|
|
4
|
+
* v1.7.2 — recall-mode scope filter shape, exported so callers
|
|
5
|
+
* (`loadRecallSearchEntries`) and tests can refer to it symbolically without
|
|
6
|
+
* `Parameters<typeof loadSearchRows>[N]` indirection.
|
|
7
|
+
*
|
|
8
|
+
* Three modes:
|
|
9
|
+
* - 'default-deny' — exclude scopes in `RECALL_DEFAULT_DENY_SCOPES` (T2).
|
|
10
|
+
* - 'exact' — exact match on `m.scope = value` (api.recall's explicit-scope
|
|
11
|
+
* request semantics).
|
|
12
|
+
* - 'default-deny-or-exact' (v1.25.0) — the default-admitted set PLUS rows
|
|
13
|
+
* whose scope equals `value`. This is the CLI `--scope` semantics: the
|
|
14
|
+
* flag predates the envelope column as a TAG-boost ranking hint
|
|
15
|
+
* (`scope:<v>` tags, HIPPO_SCOPE), so an explicit flag must UNLOCK the
|
|
16
|
+
* named envelope scope in addition to the normal set rather than narrow
|
|
17
|
+
* the result to it — narrowing would return zero rows for every
|
|
18
|
+
* tag-scoped workflow (envelope scope NULL). Strictly safer than the
|
|
19
|
+
* pre-v1.25.0 CLI behavior (no filter at all): other private scopes and
|
|
20
|
+
* quarantine buckets stay denied.
|
|
21
|
+
*
|
|
22
|
+
* Background pipelines (`consolidate`, `embeddings`, `refine-llm`, ...) call
|
|
23
|
+
* `loadSearchEntries` (no scopeFilter arg) and see all rows including
|
|
24
|
+
* quarantine.
|
|
25
|
+
*/
|
|
26
|
+
/** @internal v1.7.2 — internal SQL-builder shape; not on the public API
|
|
27
|
+
* surface (not re-exported from `src/index.ts`). Subject to change. */
|
|
28
|
+
export type RecallScopeFilter = {
|
|
29
|
+
mode: 'default-deny';
|
|
30
|
+
} | {
|
|
31
|
+
mode: 'exact';
|
|
32
|
+
value: string;
|
|
33
|
+
} | {
|
|
34
|
+
mode: 'default-deny-or-exact';
|
|
35
|
+
value: string;
|
|
36
|
+
};
|
|
37
|
+
/** Scope rule for recall: none requested is default-deny; 'exact' narrows to the request; 'additive' adds it to the default set. */
|
|
38
|
+
export declare function recallScopeFilter(requestedScope: string | undefined, mode: 'exact' | 'additive'): RecallScopeFilter;
|
|
39
|
+
/**
|
|
40
|
+
* Load likely search candidates directly from SQLite.
|
|
41
|
+
* Uses FTS5 when available, falls back to LIKE matching, then full-store fallback.
|
|
42
|
+
*
|
|
43
|
+
* When `tenantId` is provided, every SELECT (FTS join, LIKE, fallback) filters
|
|
44
|
+
* by tenant_id. Cross-tenant memories never surface. Omitted = no filter.
|
|
45
|
+
*/
|
|
46
|
+
export declare function loadSearchEntries(hippoRoot: string, query: string, limit?: number, tenantId?: string): MemoryEntry[];
|
|
47
|
+
/**
|
|
48
|
+
* v1.7.1 — recall-mode loader. Pushes the recall-side scope predicate into
|
|
49
|
+
* SQL so `unknown:legacy` cannot leak via any consumer that hasn't remembered
|
|
50
|
+
* to re-filter (root-cause-over-patches: codex flagged this on v1.6.5 review).
|
|
51
|
+
*
|
|
52
|
+
* - `requestedScope` undefined / '': default-deny on `unknown:legacy`.
|
|
53
|
+
* - `requestedScope` non-empty string: exact match on `m.scope = requestedScope`.
|
|
54
|
+
*
|
|
55
|
+
* Private-scope (`<source>:private:*`) exclusion: SQL applies a conservative
|
|
56
|
+
* pre-window approximation (`NOT LIKE '%:private:%'`, v1.25.0 — codex P2:
|
|
57
|
+
* post-window-only filtering let private rows starve admitted candidates out
|
|
58
|
+
* of the LIMIT window); the exact anchored regex
|
|
59
|
+
* (`passesScopeFilterForRecall`) remains the authoritative JS post-filter in
|
|
60
|
+
* the recall consumers.
|
|
61
|
+
*
|
|
62
|
+
* Consumers: `api.recall` (v1.7.1+), `cmdRecall`/`cmdExplain` direct CLI paths
|
|
63
|
+
* and `searchBothHybrid` recall mode (v1.25.0). Background pipelines
|
|
64
|
+
* (`consolidate`, `embeddings`, `refine-llm`, ...) keep using
|
|
65
|
+
* `loadSearchEntries` so they can see quarantined rows when needed.
|
|
66
|
+
*
|
|
67
|
+
* `tenantId` widened to optional in v1.25.0 for the searchBothHybrid recall
|
|
68
|
+
* mode (its `tenantId` option is optional); `loadSearchRows` already treats
|
|
69
|
+
* undefined as "no tenant filter" for legacy callers.
|
|
70
|
+
*/
|
|
71
|
+
export declare function loadRecallSearchEntries(hippoRoot: string, query: string, limit?: number, tenantId?: string, requestedScope?: string, explicitScopeMode?: 'exact' | 'additive', includeSuperseded?: boolean): MemoryEntry[];
|
|
72
|
+
export declare function loadRecallSearchEntriesFromDb(db: DatabaseSyncLike, query: string, limit?: number, tenantId?: string, requestedScope?: string, explicitScopeMode?: 'exact' | 'additive', includeSuperseded?: boolean): MemoryEntry[];
|
|
73
|
+
/** Which rows the vector arm of hybrid search may add: the same tenant, scope and superseded rules as the lexical load. */
|
|
74
|
+
export interface VectorCandidateSpec {
|
|
75
|
+
tenantId?: string;
|
|
76
|
+
scope?: RecallScopeFilter;
|
|
77
|
+
includeSuperseded: boolean;
|
|
78
|
+
/** How many nearest rows to add; default 50. */
|
|
79
|
+
limit?: number;
|
|
80
|
+
}
|
|
81
|
+
/** The rows nearest `queryVector` that pass `spec`, nearest first. */
|
|
82
|
+
export declare function loadVectorCandidateEntries(hippoRoot: string, queryVector: readonly number[], spec: VectorCandidateSpec): MemoryEntry[];
|
|
83
|
+
/** Rarest-K prompt terms for this connection's FTS index, as a space-joined query string.
|
|
84
|
+
* Without FTS, returns the first 32 terms, as before rarest-term selection. */
|
|
85
|
+
export declare function pickRarestFtsQuery(db: DatabaseSyncLike, terms: readonly string[], maxTerms?: number): string;
|
|
86
|
+
//# sourceMappingURL=search-rows.d.ts.map
|