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,48 @@
|
|
|
1
|
+
// Transcript reads shared by capture.ts and compaction-record.ts; a leaf so neither has to import the other.
|
|
2
|
+
import * as fs from 'fs';
|
|
3
|
+
/** Never read the whole transcript: PreCompact fires exactly when it's largest. */
|
|
4
|
+
export const PRE_COMPACT_TAIL_BYTES = 256 * 1024;
|
|
5
|
+
/** Cut to `maxChars` UTF-16 units, backing off one unit rather than leave half a surrogate pair in a stored field. */
|
|
6
|
+
export function truncateCodePointSafe(text, maxChars) {
|
|
7
|
+
if (text.length <= maxChars)
|
|
8
|
+
return text;
|
|
9
|
+
let end = maxChars;
|
|
10
|
+
if (end > 0) {
|
|
11
|
+
const code = text.charCodeAt(end - 1);
|
|
12
|
+
if (code >= 0xd800 && code <= 0xdbff)
|
|
13
|
+
end -= 1;
|
|
14
|
+
}
|
|
15
|
+
return text.slice(0, end);
|
|
16
|
+
}
|
|
17
|
+
/** The last `capBytes` of a JSONL transcript, read at an offset and starting on a whole line so every line parses. */
|
|
18
|
+
export function readTranscriptTail(transcriptPath, capBytes = PRE_COMPACT_TAIL_BYTES) {
|
|
19
|
+
const size = fs.statSync(transcriptPath).size;
|
|
20
|
+
const start = Math.max(0, size - capBytes);
|
|
21
|
+
const length = size - start;
|
|
22
|
+
if (length <= 0)
|
|
23
|
+
return '';
|
|
24
|
+
const fd = fs.openSync(transcriptPath, 'r');
|
|
25
|
+
try {
|
|
26
|
+
// A seek that lands just after '\n' already starts a whole line and must keep it.
|
|
27
|
+
let onLineBoundary = start === 0;
|
|
28
|
+
if (!onLineBoundary) {
|
|
29
|
+
const prevByte = Buffer.alloc(1);
|
|
30
|
+
fs.readSync(fd, prevByte, 0, 1, start - 1);
|
|
31
|
+
onLineBoundary = prevByte[0] === 0x0a; // '\n'
|
|
32
|
+
}
|
|
33
|
+
const buf = Buffer.alloc(length);
|
|
34
|
+
fs.readSync(fd, buf, 0, length, start);
|
|
35
|
+
let text = buf.toString('utf8');
|
|
36
|
+
if (!onLineBoundary) {
|
|
37
|
+
// Landed mid-line — drop the partial first line so every remaining
|
|
38
|
+
// line parses as complete JSON.
|
|
39
|
+
const nl = text.indexOf('\n');
|
|
40
|
+
text = nl === -1 ? '' : text.slice(nl + 1);
|
|
41
|
+
}
|
|
42
|
+
return text;
|
|
43
|
+
}
|
|
44
|
+
finally {
|
|
45
|
+
fs.closeSync(fd);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=transcript-tail.js.map
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/** Embedding vectors in the `memory_vectors` table: one Float32 BLOB per memory id, plus the one-time import of the old JSON index. */
|
|
2
|
+
import type { DatabaseSyncLike } from './db.js';
|
|
3
|
+
export declare const EMBEDDING_MODEL_META_KEY = "embedding_model";
|
|
4
|
+
export declare const MEMORY_VECTORS_DDL = "\n CREATE TABLE IF NOT EXISTS memory_vectors (\n memory_id TEXT PRIMARY KEY,\n model TEXT NOT NULL,\n dim INTEGER NOT NULL,\n vector BLOB NOT NULL\n );\n CREATE TRIGGER IF NOT EXISTS trg_memory_vectors_delete AFTER DELETE ON memories BEGIN\n DELETE FROM memory_vectors WHERE memory_id = old.id;\n END;\n";
|
|
5
|
+
export declare function encodeVector(vector: readonly number[]): Uint8Array;
|
|
6
|
+
export declare function decodeVector(blob: Uint8Array): Float32Array;
|
|
7
|
+
/** Insert or replace vectors, skipping empty or non-finite ones; the caller owns any surrounding transaction. */
|
|
8
|
+
export declare function upsertVectors(db: DatabaseSyncLike, rows: Iterable<readonly [string, readonly number[]]>, model: string): number;
|
|
9
|
+
/** Replace the whole table with `index` in one transaction, as a full rebuild does. */
|
|
10
|
+
export declare function replaceAllVectors(db: DatabaseSyncLike, index: Readonly<Record<string, readonly number[]>>, model: string): void;
|
|
11
|
+
/** Drop vectors whose memory row is gone; returns how many went. */
|
|
12
|
+
export declare function deleteOrphanVectors(db: DatabaseSyncLike): number;
|
|
13
|
+
/** Vectors for `ids`, or every stored vector when `ids` is omitted. */
|
|
14
|
+
export declare function loadVectors(db: DatabaseSyncLike, ids?: readonly string[]): Map<string, number[]>;
|
|
15
|
+
export declare function storedVectorIds(db: DatabaseSyncLike): Set<string>;
|
|
16
|
+
export declare function hasStoredVectors(db: DatabaseSyncLike): boolean;
|
|
17
|
+
export interface VectorMatch {
|
|
18
|
+
id: string;
|
|
19
|
+
score: number;
|
|
20
|
+
}
|
|
21
|
+
/** The `k` stored vectors closest to `query` among `memories m` rows passing `where` (SQL starting with ` AND`).
|
|
22
|
+
* Filters run before the cut, so rows a caller may not see can never push admitted rows out of the top k. */
|
|
23
|
+
export declare function topVectorMatches(db: DatabaseSyncLike, query: readonly number[], k: number, where: string, params: readonly (string | number)[]): VectorMatch[];
|
|
24
|
+
/** Move a legacy `embeddings.json` into `memory_vectors`, then keep the file as `embeddings.json.imported-<stamp>`.
|
|
25
|
+
* Runs after the migration commits, so the rename never outlives rolled-back rows; a file an older binary writes later imports the same way. */
|
|
26
|
+
export declare function importLegacyEmbeddingIndex(db: DatabaseSyncLike, hippoRoot: string): void;
|
|
27
|
+
//# sourceMappingURL=vector-store.d.ts.map
|
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
/** Embedding vectors in the `memory_vectors` table: one Float32 BLOB per memory id, plus the one-time import of the old JSON index. */
|
|
2
|
+
import * as fs from 'fs';
|
|
3
|
+
import * as path from 'path';
|
|
4
|
+
import { log } from './log.js';
|
|
5
|
+
/** Legacy whole-file index; imported once into `memory_vectors`, then kept beside the store as a renamed backup. */
|
|
6
|
+
const LEGACY_EMBEDDINGS_FILE = 'embeddings.json';
|
|
7
|
+
export const EMBEDDING_MODEL_META_KEY = 'embedding_model';
|
|
8
|
+
// Never equal to a real index identity, so the next embed run treats it as a model change and rebuilds every vector.
|
|
9
|
+
const QUARANTINED_INDEX_IDENTITY = 'quarantined-corrupt-index';
|
|
10
|
+
// No FK to memories: a vector may outlive its row until `hippo embed` prunes it, and the trigger covers deletes.
|
|
11
|
+
export const MEMORY_VECTORS_DDL = `
|
|
12
|
+
CREATE TABLE IF NOT EXISTS memory_vectors (
|
|
13
|
+
memory_id TEXT PRIMARY KEY,
|
|
14
|
+
model TEXT NOT NULL,
|
|
15
|
+
dim INTEGER NOT NULL,
|
|
16
|
+
vector BLOB NOT NULL
|
|
17
|
+
);
|
|
18
|
+
CREATE TRIGGER IF NOT EXISTS trg_memory_vectors_delete AFTER DELETE ON memories BEGIN
|
|
19
|
+
DELETE FROM memory_vectors WHERE memory_id = old.id;
|
|
20
|
+
END;
|
|
21
|
+
`;
|
|
22
|
+
const ID_CHUNK = 500;
|
|
23
|
+
export function encodeVector(vector) {
|
|
24
|
+
return new Uint8Array(Float32Array.from(vector).buffer);
|
|
25
|
+
}
|
|
26
|
+
export function decodeVector(blob) {
|
|
27
|
+
// A view needs 4-byte alignment; copy when SQLite hands back an unaligned slice.
|
|
28
|
+
const bytes = blob.byteOffset % 4 === 0 ? blob : blob.slice();
|
|
29
|
+
return new Float32Array(bytes.buffer, bytes.byteOffset, bytes.byteLength / 4);
|
|
30
|
+
}
|
|
31
|
+
/** Insert or replace vectors, skipping empty or non-finite ones; the caller owns any surrounding transaction. */
|
|
32
|
+
export function upsertVectors(db, rows, model) {
|
|
33
|
+
const stmt = db.prepare('INSERT OR REPLACE INTO memory_vectors (memory_id, model, dim, vector) VALUES (?, ?, ?, ?)');
|
|
34
|
+
let written = 0;
|
|
35
|
+
for (const [id, vector] of rows) {
|
|
36
|
+
if (vector.length === 0 || !vector.every(Number.isFinite))
|
|
37
|
+
continue;
|
|
38
|
+
stmt.run(id, model, vector.length, encodeVector(vector));
|
|
39
|
+
written++;
|
|
40
|
+
}
|
|
41
|
+
return written;
|
|
42
|
+
}
|
|
43
|
+
function inTransaction(db, fn) {
|
|
44
|
+
db.exec('BEGIN IMMEDIATE');
|
|
45
|
+
try {
|
|
46
|
+
const out = fn();
|
|
47
|
+
db.exec('COMMIT');
|
|
48
|
+
return out;
|
|
49
|
+
}
|
|
50
|
+
catch (err) {
|
|
51
|
+
try {
|
|
52
|
+
db.exec('ROLLBACK');
|
|
53
|
+
}
|
|
54
|
+
catch { /* keep the original error */ }
|
|
55
|
+
throw err;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
/** Replace the whole table with `index` in one transaction, as a full rebuild does. */
|
|
59
|
+
export function replaceAllVectors(db, index, model) {
|
|
60
|
+
inTransaction(db, () => {
|
|
61
|
+
db.exec('DELETE FROM memory_vectors');
|
|
62
|
+
upsertVectors(db, Object.entries(index), model);
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
/** Drop vectors whose memory row is gone; returns how many went. */
|
|
66
|
+
export function deleteOrphanVectors(db) {
|
|
67
|
+
return Number(db.prepare('DELETE FROM memory_vectors WHERE memory_id NOT IN (SELECT id FROM memories)').run().changes ?? 0);
|
|
68
|
+
}
|
|
69
|
+
/** Vectors for `ids`, or every stored vector when `ids` is omitted. */
|
|
70
|
+
export function loadVectors(db, ids) {
|
|
71
|
+
const out = new Map();
|
|
72
|
+
const read = (rows) => {
|
|
73
|
+
// SAFETY: both SELECTs below name exactly these two columns; node:sqlite returns BLOBs as Uint8Array.
|
|
74
|
+
for (const row of rows)
|
|
75
|
+
out.set(row.memory_id, Array.from(decodeVector(row.vector)));
|
|
76
|
+
};
|
|
77
|
+
if (ids === undefined) {
|
|
78
|
+
read(db.prepare('SELECT memory_id, vector FROM memory_vectors').iterate());
|
|
79
|
+
return out;
|
|
80
|
+
}
|
|
81
|
+
const unique = [...new Set(ids)];
|
|
82
|
+
for (let i = 0; i < unique.length; i += ID_CHUNK) {
|
|
83
|
+
const chunk = unique.slice(i, i + ID_CHUNK);
|
|
84
|
+
read(db.prepare(`SELECT memory_id, vector FROM memory_vectors WHERE memory_id IN (${chunk.map(() => '?').join(', ')})`).all(...chunk));
|
|
85
|
+
}
|
|
86
|
+
return out;
|
|
87
|
+
}
|
|
88
|
+
export function storedVectorIds(db) {
|
|
89
|
+
// SAFETY: the SELECT names exactly the one column read.
|
|
90
|
+
return new Set(db.prepare('SELECT memory_id FROM memory_vectors').all().map((r) => r.memory_id));
|
|
91
|
+
}
|
|
92
|
+
export function hasStoredVectors(db) {
|
|
93
|
+
return db.prepare('SELECT 1 FROM memory_vectors LIMIT 1').get() !== undefined;
|
|
94
|
+
}
|
|
95
|
+
/** The `k` stored vectors closest to `query` among `memories m` rows passing `where` (SQL starting with ` AND`).
|
|
96
|
+
* Filters run before the cut, so rows a caller may not see can never push admitted rows out of the top k. */
|
|
97
|
+
export function topVectorMatches(db, query, k, where, params) {
|
|
98
|
+
if (k <= 0 || query.length === 0)
|
|
99
|
+
return [];
|
|
100
|
+
const q = Float32Array.from(query);
|
|
101
|
+
let qNorm = 0;
|
|
102
|
+
for (let i = 0; i < q.length; i++)
|
|
103
|
+
qNorm += q[i] * q[i];
|
|
104
|
+
qNorm = Math.sqrt(qNorm);
|
|
105
|
+
if (qNorm < 1e-10)
|
|
106
|
+
return [];
|
|
107
|
+
// SHORTCUT: brute-force cosine over every vector of matching dim, fine to ~100k rows; an ANN index (sqlite-vec, HNSW) is the upgrade.
|
|
108
|
+
const rows = db.prepare(`
|
|
109
|
+
SELECT v.memory_id AS id, v.vector AS vector
|
|
110
|
+
FROM memory_vectors v JOIN memories m ON m.id = v.memory_id
|
|
111
|
+
WHERE v.dim = ?${where}
|
|
112
|
+
`).iterate(q.length, ...params);
|
|
113
|
+
const top = [];
|
|
114
|
+
// SAFETY: the SELECT above names exactly these two columns; node:sqlite returns BLOBs as Uint8Array.
|
|
115
|
+
for (const row of rows) {
|
|
116
|
+
const v = decodeVector(row.vector);
|
|
117
|
+
let dot = 0;
|
|
118
|
+
let norm = 0;
|
|
119
|
+
for (let i = 0; i < v.length; i++) {
|
|
120
|
+
dot += q[i] * v[i];
|
|
121
|
+
norm += v[i] * v[i];
|
|
122
|
+
}
|
|
123
|
+
if (norm < 1e-20)
|
|
124
|
+
continue;
|
|
125
|
+
const score = dot / (qNorm * Math.sqrt(norm));
|
|
126
|
+
if (top.length === k && !beats(score, row.id, top[k - 1]))
|
|
127
|
+
continue;
|
|
128
|
+
insertSorted(top, { id: row.id, score }, k);
|
|
129
|
+
}
|
|
130
|
+
return top;
|
|
131
|
+
}
|
|
132
|
+
// Ties break on id so the cut is the same on every run.
|
|
133
|
+
function beats(score, id, other) {
|
|
134
|
+
return score > other.score || (score === other.score && id < other.id);
|
|
135
|
+
}
|
|
136
|
+
function insertSorted(top, m, k) {
|
|
137
|
+
let i = top.length;
|
|
138
|
+
while (i > 0 && beats(m.score, m.id, top[i - 1]))
|
|
139
|
+
i--;
|
|
140
|
+
top.splice(i, 0, m);
|
|
141
|
+
if (top.length > k)
|
|
142
|
+
top.pop();
|
|
143
|
+
}
|
|
144
|
+
function stamp() {
|
|
145
|
+
return `${new Date().toISOString().replace(/[:.]/g, '-')}-${process.pid}`;
|
|
146
|
+
}
|
|
147
|
+
/** Rename `fp` to `aside`; a rename blocked by an open handle (Windows) falls back to a copy, so the bytes are kept either way. */
|
|
148
|
+
function moveAside(fp, aside) {
|
|
149
|
+
try {
|
|
150
|
+
fs.renameSync(fp, aside);
|
|
151
|
+
return true;
|
|
152
|
+
}
|
|
153
|
+
catch (err) {
|
|
154
|
+
if (err instanceof Error && 'code' in err && err.code === 'ENOENT')
|
|
155
|
+
return false;
|
|
156
|
+
fs.copyFileSync(fp, aside, fs.constants.COPYFILE_EXCL);
|
|
157
|
+
fs.rmSync(fp, { force: true });
|
|
158
|
+
return true;
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
// The old writer only wrote a plain object of id to number[]; any other shape is corrupt, and non-numeric entries are dropped.
|
|
162
|
+
function parseLegacyIndex(raw) {
|
|
163
|
+
let parsed;
|
|
164
|
+
try {
|
|
165
|
+
parsed = JSON.parse(raw);
|
|
166
|
+
}
|
|
167
|
+
catch {
|
|
168
|
+
return null; // the caller quarantines the corrupt file and logs it
|
|
169
|
+
}
|
|
170
|
+
if (!(parsed instanceof Object) || Array.isArray(parsed))
|
|
171
|
+
return null;
|
|
172
|
+
const index = new Map();
|
|
173
|
+
for (const [id, value] of Object.entries(parsed)) {
|
|
174
|
+
if (Array.isArray(value) && value.every(Number.isFinite))
|
|
175
|
+
index.set(id, value);
|
|
176
|
+
}
|
|
177
|
+
return index;
|
|
178
|
+
}
|
|
179
|
+
/** Move a legacy `embeddings.json` into `memory_vectors`, then keep the file as `embeddings.json.imported-<stamp>`.
|
|
180
|
+
* Runs after the migration commits, so the rename never outlives rolled-back rows; a file an older binary writes later imports the same way. */
|
|
181
|
+
export function importLegacyEmbeddingIndex(db, hippoRoot) {
|
|
182
|
+
const fp = path.join(hippoRoot, LEGACY_EMBEDDINGS_FILE);
|
|
183
|
+
let raw;
|
|
184
|
+
try {
|
|
185
|
+
raw = fs.readFileSync(fp, 'utf8');
|
|
186
|
+
}
|
|
187
|
+
catch (err) {
|
|
188
|
+
if (err instanceof Error && 'code' in err && err.code === 'ENOENT')
|
|
189
|
+
return;
|
|
190
|
+
throw err;
|
|
191
|
+
}
|
|
192
|
+
const index = parseLegacyIndex(raw);
|
|
193
|
+
if (!index) {
|
|
194
|
+
const aside = `${fp}.corrupt-${stamp()}`;
|
|
195
|
+
if (!moveAside(fp, aside))
|
|
196
|
+
return;
|
|
197
|
+
log.error(`${LEGACY_EMBEDDINGS_FILE} could not be parsed; kept it as ${path.basename(aside)} and the next embed rebuilds the index`, { hippoRoot });
|
|
198
|
+
db.prepare(`INSERT INTO meta(key, value) VALUES(?, ?) ON CONFLICT(key) DO UPDATE SET value=excluded.value`)
|
|
199
|
+
.run(EMBEDDING_MODEL_META_KEY, QUARANTINED_INDEX_IDENTITY);
|
|
200
|
+
return;
|
|
201
|
+
}
|
|
202
|
+
// SAFETY: the SELECT names exactly the one column read.
|
|
203
|
+
const model = db.prepare(`SELECT value FROM meta WHERE key = ?`).get(EMBEDDING_MODEL_META_KEY)?.value ?? '';
|
|
204
|
+
const written = inTransaction(db, () => upsertVectors(db, index, model));
|
|
205
|
+
const backup = `${fp}.imported-${stamp()}`;
|
|
206
|
+
if (moveAside(fp, backup)) {
|
|
207
|
+
log.info(`moved ${written} vectors from ${LEGACY_EMBEDDINGS_FILE} into the store; the file is kept as ${path.basename(backup)}`, { hippoRoot });
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
//# sourceMappingURL=vector-store.js.map
|
package/dist/version.d.ts
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
* hand. scripts/check-manifest-versions.mjs gates publish on all seven sites.
|
|
7
7
|
*
|
|
8
8
|
* Used by:
|
|
9
|
-
* - src/db.ts rollback-safety guard (refuses to open a DB stamped with
|
|
9
|
+
* - src/db/migrate.ts rollback-safety guard (refuses to open a DB stamped with
|
|
10
10
|
* min_compatible_binary newer than this).
|
|
11
11
|
* - src/server.ts HTTP /health.
|
|
12
12
|
* - src/mcp/server.ts MCP serverInfo.
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
* an ESM `import` can resolve cleanly, and a hardcoded constant survives
|
|
17
17
|
* any packager that drops .json files.
|
|
18
18
|
*/
|
|
19
|
-
export declare const PACKAGE_VERSION = "1.
|
|
19
|
+
export declare const PACKAGE_VERSION = "1.61.0";
|
|
20
20
|
/** Compares plain x.y.z versions, positive if a > b; tags throw so the rollback guard never misfires silently. */
|
|
21
21
|
export declare function compareSemver(a: string, b: string): number;
|
|
22
22
|
//# sourceMappingURL=version.d.ts.map
|
package/dist/version.js
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
* hand. scripts/check-manifest-versions.mjs gates publish on all seven sites.
|
|
7
7
|
*
|
|
8
8
|
* Used by:
|
|
9
|
-
* - src/db.ts rollback-safety guard (refuses to open a DB stamped with
|
|
9
|
+
* - src/db/migrate.ts rollback-safety guard (refuses to open a DB stamped with
|
|
10
10
|
* min_compatible_binary newer than this).
|
|
11
11
|
* - src/server.ts HTTP /health.
|
|
12
12
|
* - src/mcp/server.ts MCP serverInfo.
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
* an ESM `import` can resolve cleanly, and a hardcoded constant survives
|
|
17
17
|
* any packager that drops .json files.
|
|
18
18
|
*/
|
|
19
|
-
export const PACKAGE_VERSION = '1.
|
|
19
|
+
export const PACKAGE_VERSION = '1.61.0';
|
|
20
20
|
/** Compares plain x.y.z versions, positive if a > b; tags throw so the rollback guard never misfires silently. */
|
|
21
21
|
export function compareSemver(a, b) {
|
|
22
22
|
const parse = (v) => {
|
package/dist/working-memory.js
CHANGED
package/dist/yaml.js
CHANGED
|
@@ -3,13 +3,42 @@
|
|
|
3
3
|
* No external deps. Handles simple key-value + arrays (inline only).
|
|
4
4
|
* Sufficient for the MemoryEntry frontmatter schema.
|
|
5
5
|
*/
|
|
6
|
+
const SCALAR_LOOKALIKE = /^(null|true|false|-?\d+(\.\d+)?)$/;
|
|
7
|
+
const UNESCAPES = new Map([['\\', '\\'], ['"', '"'], ['n', '\n'], ['r', '\r']]);
|
|
6
8
|
function escapeString(s) {
|
|
7
|
-
//
|
|
8
|
-
if (/[:#\[\]{},\n\r"']/.test(s) || s.trim() !== s || s === '') {
|
|
9
|
-
|
|
9
|
+
// A string that reads as null, a boolean or a number is quoted so it comes back a string.
|
|
10
|
+
if (/[:#\[\]{},\n\r"']/.test(s) || s.trim() !== s || s === '' || SCALAR_LOOKALIKE.test(s)) {
|
|
11
|
+
const escaped = s.replace(/\\/g, '\\\\').replace(/"/g, '\\"').replace(/\n/g, '\\n').replace(/\r/g, '\\r');
|
|
12
|
+
return `"${escaped}"`;
|
|
10
13
|
}
|
|
11
14
|
return s;
|
|
12
15
|
}
|
|
16
|
+
// An unknown escape stays as written, so a hand-written Windows path still reads back.
|
|
17
|
+
function unescapeQuoted(body) {
|
|
18
|
+
return body.replace(/\\([\s\S])/g, (all, ch) => UNESCAPES.get(ch) ?? all);
|
|
19
|
+
}
|
|
20
|
+
function parseString(raw) {
|
|
21
|
+
const t = raw.trim();
|
|
22
|
+
return t.length >= 2 && t.startsWith('"') && t.endsWith('"') ? unescapeQuoted(t.slice(1, -1)) : t;
|
|
23
|
+
}
|
|
24
|
+
function splitInlineList(inner) {
|
|
25
|
+
const items = [];
|
|
26
|
+
let start = 0;
|
|
27
|
+
let inQuotes = false;
|
|
28
|
+
for (let i = 0; i < inner.length; i++) {
|
|
29
|
+
const ch = inner[i];
|
|
30
|
+
if (inQuotes && ch === '\\')
|
|
31
|
+
i++;
|
|
32
|
+
else if (ch === '"')
|
|
33
|
+
inQuotes = !inQuotes;
|
|
34
|
+
else if (ch === ',' && !inQuotes) {
|
|
35
|
+
items.push(inner.slice(start, i));
|
|
36
|
+
start = i + 1;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
items.push(inner.slice(start));
|
|
40
|
+
return items.map(parseString);
|
|
41
|
+
}
|
|
13
42
|
function isYamlBoolean(val) {
|
|
14
43
|
return typeof val === 'boolean';
|
|
15
44
|
}
|
|
@@ -53,15 +82,11 @@ function parseValue(raw) {
|
|
|
53
82
|
const inner = s.slice(1, -1).trim();
|
|
54
83
|
if (inner === '')
|
|
55
84
|
return [];
|
|
56
|
-
return inner
|
|
57
|
-
const t = item.trim();
|
|
58
|
-
return t.startsWith('"') && t.endsWith('"') ? t.slice(1, -1) : t;
|
|
59
|
-
});
|
|
85
|
+
return splitInlineList(inner);
|
|
60
86
|
}
|
|
61
87
|
// Quoted string
|
|
62
|
-
if (s.startsWith('"') && s.endsWith('"'))
|
|
63
|
-
return s
|
|
64
|
-
}
|
|
88
|
+
if (s.startsWith('"') && s.endsWith('"'))
|
|
89
|
+
return parseString(s);
|
|
65
90
|
// Number
|
|
66
91
|
if (/^-?\d+(\.\d+)?$/.test(s)) {
|
|
67
92
|
return parseFloat(s);
|
|
@@ -91,7 +116,7 @@ export function parseFrontmatter(raw) {
|
|
|
91
116
|
const listLine = frontLines[j].trim();
|
|
92
117
|
if (!listLine.startsWith('- '))
|
|
93
118
|
break;
|
|
94
|
-
items.push(listLine.slice(2)
|
|
119
|
+
items.push(parseString(listLine.slice(2)));
|
|
95
120
|
j++;
|
|
96
121
|
}
|
|
97
122
|
if (items.length > 0) {
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|