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,66 @@
|
|
|
1
|
+
import { tableHasColumn } from '../tables.js';
|
|
2
|
+
export const v14 = {
|
|
3
|
+
version: 14,
|
|
4
|
+
up: (db) => {
|
|
5
|
+
// A3 provenance envelope: kind, scope, owner, artifact_ref.
|
|
6
|
+
// SQLite ALTER TABLE ADD COLUMN cannot add CHECK; CHECK enforcement lives
|
|
7
|
+
// in INSERT/UPDATE triggers added later in this migration.
|
|
8
|
+
if (!tableHasColumn(db, 'memories', 'kind')) {
|
|
9
|
+
db.exec(`ALTER TABLE memories ADD COLUMN kind TEXT DEFAULT 'distilled'`);
|
|
10
|
+
}
|
|
11
|
+
if (!tableHasColumn(db, 'memories', 'scope')) {
|
|
12
|
+
db.exec(`ALTER TABLE memories ADD COLUMN scope TEXT`);
|
|
13
|
+
db.exec(`CREATE INDEX IF NOT EXISTS idx_memories_scope ON memories(scope) WHERE scope IS NOT NULL`);
|
|
14
|
+
}
|
|
15
|
+
if (!tableHasColumn(db, 'memories', 'owner')) {
|
|
16
|
+
db.exec(`ALTER TABLE memories ADD COLUMN owner TEXT`);
|
|
17
|
+
}
|
|
18
|
+
if (!tableHasColumn(db, 'memories', 'artifact_ref')) {
|
|
19
|
+
db.exec(`ALTER TABLE memories ADD COLUMN artifact_ref TEXT`);
|
|
20
|
+
}
|
|
21
|
+
// Backfill kind for any rows where it's NULL (pre-migration data).
|
|
22
|
+
db.exec(`UPDATE memories SET kind = 'superseded' WHERE kind IS NULL AND superseded_by IS NOT NULL`);
|
|
23
|
+
db.exec(`UPDATE memories SET kind = 'distilled' WHERE kind IS NULL`);
|
|
24
|
+
// raw_archive: legitimate path for kind='raw' removal (used by archiveRawMemory).
|
|
25
|
+
db.exec(`
|
|
26
|
+
CREATE TABLE IF NOT EXISTS raw_archive (
|
|
27
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
28
|
+
memory_id TEXT NOT NULL,
|
|
29
|
+
archived_at TEXT NOT NULL,
|
|
30
|
+
reason TEXT NOT NULL,
|
|
31
|
+
archived_by TEXT,
|
|
32
|
+
payload_json TEXT NOT NULL
|
|
33
|
+
)
|
|
34
|
+
`);
|
|
35
|
+
db.exec(`CREATE INDEX IF NOT EXISTS idx_raw_archive_memory_id ON raw_archive(memory_id)`);
|
|
36
|
+
// Append-only invariant: kind='raw' rows cannot be deleted directly.
|
|
37
|
+
// Use raw_archive flow: archive-then-update-then-delete (see src/raw-archive.ts).
|
|
38
|
+
db.exec(`
|
|
39
|
+
CREATE TRIGGER IF NOT EXISTS trg_memories_raw_append_only
|
|
40
|
+
BEFORE DELETE ON memories
|
|
41
|
+
WHEN OLD.kind = 'raw'
|
|
42
|
+
BEGIN
|
|
43
|
+
SELECT RAISE(ABORT, 'raw is append-only');
|
|
44
|
+
END
|
|
45
|
+
`);
|
|
46
|
+
// CHECK substitute: ALTER TABLE cannot add CHECK, so enforce kind allowed-set
|
|
47
|
+
// via INSERT/UPDATE triggers.
|
|
48
|
+
db.exec(`
|
|
49
|
+
CREATE TRIGGER IF NOT EXISTS trg_memories_kind_check_insert
|
|
50
|
+
BEFORE INSERT ON memories
|
|
51
|
+
WHEN NEW.kind IS NOT NULL AND NEW.kind NOT IN ('raw','distilled','superseded','archived')
|
|
52
|
+
BEGIN
|
|
53
|
+
SELECT RAISE(ABORT, 'invalid kind: must be raw|distilled|superseded|archived');
|
|
54
|
+
END
|
|
55
|
+
`);
|
|
56
|
+
db.exec(`
|
|
57
|
+
CREATE TRIGGER IF NOT EXISTS trg_memories_kind_check_update
|
|
58
|
+
BEFORE UPDATE ON memories
|
|
59
|
+
WHEN NEW.kind IS NOT NULL AND NEW.kind NOT IN ('raw','distilled','superseded','archived')
|
|
60
|
+
BEGIN
|
|
61
|
+
SELECT RAISE(ABORT, 'invalid kind: must be raw|distilled|superseded|archived');
|
|
62
|
+
END
|
|
63
|
+
`);
|
|
64
|
+
},
|
|
65
|
+
};
|
|
66
|
+
//# sourceMappingURL=v14.js.map
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
export const v15 = {
|
|
2
|
+
version: 15,
|
|
3
|
+
up: (db) => {
|
|
4
|
+
// A3 hardening (post-review): close the NULL-kind bypass and add raw_archive
|
|
5
|
+
// dedup safety. Both findings landed in /review on commits 41b1f4d..6456e7d.
|
|
6
|
+
//
|
|
7
|
+
// (1) Original v14 triggers used `WHEN NEW.kind IS NOT NULL AND NEW.kind NOT IN (...)`.
|
|
8
|
+
// A direct INSERT/UPDATE setting kind=NULL bypassed the CHECK substitute. Replace
|
|
9
|
+
// with `WHEN NEW.kind IS NULL OR NEW.kind NOT IN (...)` so NULL is rejected too.
|
|
10
|
+
// (2) Add UNIQUE(memory_id, archived_at) to raw_archive so re-archiving the same id
|
|
11
|
+
// in the same instant cannot produce ambiguous audit rows. Per-id history is still
|
|
12
|
+
// allowed (different timestamps).
|
|
13
|
+
db.exec(`DROP TRIGGER IF EXISTS trg_memories_kind_check_insert`);
|
|
14
|
+
db.exec(`DROP TRIGGER IF EXISTS trg_memories_kind_check_update`);
|
|
15
|
+
db.exec(`
|
|
16
|
+
CREATE TRIGGER trg_memories_kind_check_insert
|
|
17
|
+
BEFORE INSERT ON memories
|
|
18
|
+
WHEN NEW.kind IS NULL OR NEW.kind NOT IN ('raw','distilled','superseded','archived')
|
|
19
|
+
BEGIN
|
|
20
|
+
SELECT RAISE(ABORT, 'invalid kind: must be raw|distilled|superseded|archived (not null)');
|
|
21
|
+
END
|
|
22
|
+
`);
|
|
23
|
+
db.exec(`
|
|
24
|
+
CREATE TRIGGER trg_memories_kind_check_update
|
|
25
|
+
BEFORE UPDATE ON memories
|
|
26
|
+
WHEN NEW.kind IS NULL OR NEW.kind NOT IN ('raw','distilled','superseded','archived')
|
|
27
|
+
BEGIN
|
|
28
|
+
SELECT RAISE(ABORT, 'invalid kind: must be raw|distilled|superseded|archived (not null)');
|
|
29
|
+
END
|
|
30
|
+
`);
|
|
31
|
+
// Defensive: any rows that somehow have NULL kind get fixed (shouldn't exist post-v14
|
|
32
|
+
// backfill, but cheap insurance).
|
|
33
|
+
db.exec(`UPDATE memories SET kind = 'distilled' WHERE kind IS NULL`);
|
|
34
|
+
// raw_archive uniqueness. SQLite cannot ADD CONSTRAINT, but a partial unique index
|
|
35
|
+
// on (memory_id, archived_at) is equivalent for INSERT-time enforcement.
|
|
36
|
+
db.exec(`
|
|
37
|
+
CREATE UNIQUE INDEX IF NOT EXISTS idx_raw_archive_id_at
|
|
38
|
+
ON raw_archive(memory_id, archived_at)
|
|
39
|
+
`);
|
|
40
|
+
},
|
|
41
|
+
};
|
|
42
|
+
//# sourceMappingURL=v15.js.map
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { tableHasColumn } from '../tables.js';
|
|
2
|
+
export const v16 = {
|
|
3
|
+
version: 16,
|
|
4
|
+
up: (db) => {
|
|
5
|
+
// A5 stub auth: add tenant_id to all data tables. Single-tenant per deployment;
|
|
6
|
+
// multi-tenant enforcement deferred to v2 (full A5). The columns are needed now
|
|
7
|
+
// so future B-track tables don't have to backfill.
|
|
8
|
+
if (!tableHasColumn(db, 'memories', 'tenant_id')) {
|
|
9
|
+
db.exec(`ALTER TABLE memories ADD COLUMN tenant_id TEXT NOT NULL DEFAULT 'default'`);
|
|
10
|
+
}
|
|
11
|
+
if (!tableHasColumn(db, 'working_memory', 'tenant_id')) {
|
|
12
|
+
db.exec(`ALTER TABLE working_memory ADD COLUMN tenant_id TEXT NOT NULL DEFAULT 'default'`);
|
|
13
|
+
}
|
|
14
|
+
if (!tableHasColumn(db, 'consolidation_runs', 'tenant_id')) {
|
|
15
|
+
db.exec(`ALTER TABLE consolidation_runs ADD COLUMN tenant_id TEXT NOT NULL DEFAULT 'default'`);
|
|
16
|
+
}
|
|
17
|
+
if (!tableHasColumn(db, 'task_snapshots', 'tenant_id')) {
|
|
18
|
+
db.exec(`ALTER TABLE task_snapshots ADD COLUMN tenant_id TEXT NOT NULL DEFAULT 'default'`);
|
|
19
|
+
}
|
|
20
|
+
if (!tableHasColumn(db, 'memory_conflicts', 'tenant_id')) {
|
|
21
|
+
db.exec(`ALTER TABLE memory_conflicts ADD COLUMN tenant_id TEXT NOT NULL DEFAULT 'default'`);
|
|
22
|
+
}
|
|
23
|
+
// Composite indexes for recall hot paths. Leading column is tenant_id so
|
|
24
|
+
// single-tenant lookups are O(log n).
|
|
25
|
+
db.exec(`CREATE INDEX IF NOT EXISTS idx_memories_tenant_created ON memories(tenant_id, created)`);
|
|
26
|
+
db.exec(`CREATE INDEX IF NOT EXISTS idx_working_memory_tenant ON working_memory(tenant_id, importance DESC, created_at DESC)`);
|
|
27
|
+
db.exec(`CREATE INDEX IF NOT EXISTS idx_consolidation_runs_tenant_ts ON consolidation_runs(tenant_id, timestamp DESC)`);
|
|
28
|
+
db.exec(`CREATE INDEX IF NOT EXISTS idx_task_snapshots_tenant_status ON task_snapshots(tenant_id, status, updated_at DESC)`);
|
|
29
|
+
// A5 stub auth: api_keys (scrypt-hashed; plaintext returned to caller exactly once)
|
|
30
|
+
// and audit_log (append-only mutation trail). Both carry tenant_id from day 1 so
|
|
31
|
+
// future multi-tenant enforcement is a config flip, not a re-migration.
|
|
32
|
+
db.exec(`
|
|
33
|
+
CREATE TABLE IF NOT EXISTS api_keys (
|
|
34
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
35
|
+
key_id TEXT UNIQUE NOT NULL,
|
|
36
|
+
key_hash TEXT NOT NULL,
|
|
37
|
+
tenant_id TEXT NOT NULL DEFAULT 'default',
|
|
38
|
+
label TEXT,
|
|
39
|
+
created_at TEXT NOT NULL,
|
|
40
|
+
revoked_at TEXT
|
|
41
|
+
)
|
|
42
|
+
`);
|
|
43
|
+
db.exec(`
|
|
44
|
+
CREATE INDEX IF NOT EXISTS idx_api_keys_tenant_active
|
|
45
|
+
ON api_keys(tenant_id) WHERE revoked_at IS NULL
|
|
46
|
+
`);
|
|
47
|
+
db.exec(`
|
|
48
|
+
CREATE TABLE IF NOT EXISTS audit_log (
|
|
49
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
50
|
+
ts TEXT NOT NULL,
|
|
51
|
+
tenant_id TEXT NOT NULL DEFAULT 'default',
|
|
52
|
+
actor TEXT NOT NULL,
|
|
53
|
+
op TEXT NOT NULL,
|
|
54
|
+
target_id TEXT,
|
|
55
|
+
metadata_json TEXT NOT NULL DEFAULT '{}'
|
|
56
|
+
)
|
|
57
|
+
`);
|
|
58
|
+
db.exec(`CREATE INDEX IF NOT EXISTS idx_audit_log_tenant_ts ON audit_log(tenant_id, ts DESC)`);
|
|
59
|
+
},
|
|
60
|
+
};
|
|
61
|
+
//# sourceMappingURL=v16.js.map
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
export const v17 = {
|
|
2
|
+
version: 17,
|
|
3
|
+
up: (db) => {
|
|
4
|
+
// E1.3 Slack ingestion: idempotency log, per-channel backfill cursors, DLQ.
|
|
5
|
+
// See docs/plans/2026-04-29-e1.3-slack-ingestion.md.
|
|
6
|
+
db.exec(`
|
|
7
|
+
CREATE TABLE IF NOT EXISTS slack_event_log (
|
|
8
|
+
event_id TEXT PRIMARY KEY,
|
|
9
|
+
ingested_at TEXT NOT NULL,
|
|
10
|
+
memory_id TEXT
|
|
11
|
+
)
|
|
12
|
+
`);
|
|
13
|
+
db.exec(`CREATE INDEX IF NOT EXISTS idx_slack_event_log_memory ON slack_event_log(memory_id) WHERE memory_id IS NOT NULL`);
|
|
14
|
+
db.exec(`
|
|
15
|
+
CREATE TABLE IF NOT EXISTS slack_cursors (
|
|
16
|
+
tenant_id TEXT NOT NULL,
|
|
17
|
+
channel_id TEXT NOT NULL,
|
|
18
|
+
latest_ts TEXT NOT NULL,
|
|
19
|
+
updated_at TEXT NOT NULL,
|
|
20
|
+
PRIMARY KEY (tenant_id, channel_id)
|
|
21
|
+
)
|
|
22
|
+
`);
|
|
23
|
+
db.exec(`
|
|
24
|
+
CREATE TABLE IF NOT EXISTS slack_dlq (
|
|
25
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
26
|
+
tenant_id TEXT NOT NULL,
|
|
27
|
+
raw_payload TEXT NOT NULL,
|
|
28
|
+
error TEXT NOT NULL,
|
|
29
|
+
received_at TEXT NOT NULL,
|
|
30
|
+
retried_at TEXT
|
|
31
|
+
)
|
|
32
|
+
`);
|
|
33
|
+
db.exec(`CREATE INDEX IF NOT EXISTS idx_slack_dlq_tenant_received ON slack_dlq(tenant_id, received_at)`);
|
|
34
|
+
// Multi-tenant routing seam (review patch #6). Empty by default — single-
|
|
35
|
+
// tenant deployments resolve via HIPPO_TENANT fallback. Multi-workspace
|
|
36
|
+
// deployments populate this table to map team_id → tenant_id.
|
|
37
|
+
db.exec(`
|
|
38
|
+
CREATE TABLE IF NOT EXISTS slack_workspaces (
|
|
39
|
+
team_id TEXT PRIMARY KEY,
|
|
40
|
+
tenant_id TEXT NOT NULL,
|
|
41
|
+
added_at TEXT NOT NULL
|
|
42
|
+
)
|
|
43
|
+
`);
|
|
44
|
+
},
|
|
45
|
+
};
|
|
46
|
+
//# sourceMappingURL=v17.js.map
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
export const v18 = {
|
|
2
|
+
version: 18,
|
|
3
|
+
up: (db) => {
|
|
4
|
+
db.exec(`
|
|
5
|
+
CREATE TABLE IF NOT EXISTS goal_stack (
|
|
6
|
+
id TEXT PRIMARY KEY,
|
|
7
|
+
session_id TEXT NOT NULL,
|
|
8
|
+
tenant_id TEXT NOT NULL DEFAULT 'default',
|
|
9
|
+
goal_name TEXT NOT NULL,
|
|
10
|
+
level INTEGER NOT NULL DEFAULT 0
|
|
11
|
+
CHECK (level BETWEEN 0 AND 2),
|
|
12
|
+
parent_goal_id TEXT REFERENCES goal_stack(id) ON DELETE SET NULL,
|
|
13
|
+
status TEXT NOT NULL CHECK (status IN ('active','suspended','completed')),
|
|
14
|
+
success_condition TEXT,
|
|
15
|
+
retrieval_policy_id TEXT,
|
|
16
|
+
created_at TEXT NOT NULL,
|
|
17
|
+
completed_at TEXT,
|
|
18
|
+
outcome_score REAL
|
|
19
|
+
CHECK (outcome_score IS NULL OR (outcome_score >= 0 AND outcome_score <= 1))
|
|
20
|
+
);
|
|
21
|
+
|
|
22
|
+
CREATE INDEX IF NOT EXISTS idx_goal_stack_tenant_session_status
|
|
23
|
+
ON goal_stack(tenant_id, session_id, status, created_at);
|
|
24
|
+
|
|
25
|
+
CREATE TABLE IF NOT EXISTS retrieval_policy (
|
|
26
|
+
id TEXT PRIMARY KEY,
|
|
27
|
+
goal_id TEXT NOT NULL REFERENCES goal_stack(id) ON DELETE CASCADE,
|
|
28
|
+
policy_type TEXT NOT NULL CHECK (policy_type IN
|
|
29
|
+
('schema-fit-biased','error-prioritized','recency-first','hybrid')),
|
|
30
|
+
weight_schema_fit REAL NOT NULL DEFAULT 1.0
|
|
31
|
+
CHECK (weight_schema_fit >= 0 AND weight_schema_fit <= 100),
|
|
32
|
+
weight_recency REAL NOT NULL DEFAULT 1.0
|
|
33
|
+
CHECK (weight_recency >= 0 AND weight_recency <= 100),
|
|
34
|
+
weight_outcome REAL NOT NULL DEFAULT 1.0
|
|
35
|
+
CHECK (weight_outcome >= 0 AND weight_outcome <= 100),
|
|
36
|
+
error_priority REAL NOT NULL DEFAULT 1.0
|
|
37
|
+
CHECK (error_priority >= 0 AND error_priority <= 100)
|
|
38
|
+
);
|
|
39
|
+
|
|
40
|
+
CREATE INDEX IF NOT EXISTS idx_retrieval_policy_goal
|
|
41
|
+
ON retrieval_policy(goal_id);
|
|
42
|
+
|
|
43
|
+
CREATE TABLE IF NOT EXISTS goal_recall_log (
|
|
44
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
45
|
+
goal_id TEXT NOT NULL REFERENCES goal_stack(id) ON DELETE CASCADE,
|
|
46
|
+
memory_id TEXT NOT NULL REFERENCES memories(id) ON DELETE CASCADE,
|
|
47
|
+
tenant_id TEXT NOT NULL DEFAULT 'default',
|
|
48
|
+
session_id TEXT NOT NULL,
|
|
49
|
+
recalled_at TEXT NOT NULL,
|
|
50
|
+
score REAL NOT NULL
|
|
51
|
+
);
|
|
52
|
+
|
|
53
|
+
CREATE INDEX IF NOT EXISTS idx_goal_recall_log_goal
|
|
54
|
+
ON goal_recall_log(goal_id);
|
|
55
|
+
CREATE UNIQUE INDEX IF NOT EXISTS uniq_goal_recall_log_memory_goal
|
|
56
|
+
ON goal_recall_log(memory_id, goal_id);
|
|
57
|
+
`);
|
|
58
|
+
},
|
|
59
|
+
};
|
|
60
|
+
//# sourceMappingURL=v18.js.map
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { tableHasColumn } from '../tables.js';
|
|
2
|
+
export const v19 = {
|
|
3
|
+
version: 19,
|
|
4
|
+
up: (db) => {
|
|
5
|
+
// v0.39 commit 3 (Slack hardening): widen slack_dlq with bucketing,
|
|
6
|
+
// retry tracking, and the signature/timestamp pair that lets `hippo
|
|
7
|
+
// slack dlq replay` re-verify before re-running ingest. ALTER ADD
|
|
8
|
+
// COLUMN with DEFAULT is non-destructive — legacy rows take the
|
|
9
|
+
// default values. Idempotent via tableHasColumn().
|
|
10
|
+
if (!tableHasColumn(db, 'slack_dlq', 'team_id')) {
|
|
11
|
+
db.exec(`ALTER TABLE slack_dlq ADD COLUMN team_id TEXT`);
|
|
12
|
+
}
|
|
13
|
+
if (!tableHasColumn(db, 'slack_dlq', 'bucket')) {
|
|
14
|
+
db.exec(`ALTER TABLE slack_dlq ADD COLUMN bucket TEXT NOT NULL DEFAULT 'parse_error'`);
|
|
15
|
+
// SQLite ALTER TABLE cannot add CHECK; bucket value enforcement is app-level.
|
|
16
|
+
}
|
|
17
|
+
if (!tableHasColumn(db, 'slack_dlq', 'retry_count')) {
|
|
18
|
+
db.exec(`ALTER TABLE slack_dlq ADD COLUMN retry_count INTEGER NOT NULL DEFAULT 0`);
|
|
19
|
+
}
|
|
20
|
+
if (!tableHasColumn(db, 'slack_dlq', 'signature')) {
|
|
21
|
+
db.exec(`ALTER TABLE slack_dlq ADD COLUMN signature TEXT`);
|
|
22
|
+
}
|
|
23
|
+
if (!tableHasColumn(db, 'slack_dlq', 'slack_timestamp')) {
|
|
24
|
+
db.exec(`ALTER TABLE slack_dlq ADD COLUMN slack_timestamp TEXT`);
|
|
25
|
+
}
|
|
26
|
+
},
|
|
27
|
+
};
|
|
28
|
+
//# sourceMappingURL=v19.js.map
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
export const v20 = {
|
|
2
|
+
version: 20,
|
|
3
|
+
up: (db) => {
|
|
4
|
+
// v0.39 commit 4 (GDPR Path A backfill): redact every existing
|
|
5
|
+
// raw_archive.payload_json so historical archives match the new
|
|
6
|
+
// metadata-only contract from src/raw-archive.ts. Read each row, parse
|
|
7
|
+
// the existing JSON to extract tenant_id and kind (best effort), then
|
|
8
|
+
// UPDATE with the redacted shape. Rows with unparseable legacy JSON get
|
|
9
|
+
// redacted with tenant_id='unknown', kind='unknown'. The audit_log
|
|
10
|
+
// remains the compliance record.
|
|
11
|
+
// SAFETY: rows' shape matches the four columns named in the SELECT above.
|
|
12
|
+
const rows = db
|
|
13
|
+
.prepare(`SELECT id, archived_at, reason, payload_json FROM raw_archive`)
|
|
14
|
+
.all();
|
|
15
|
+
const update = db.prepare(`UPDATE raw_archive SET payload_json = ? WHERE id = ?`);
|
|
16
|
+
for (const row of rows) {
|
|
17
|
+
let tenant = 'unknown';
|
|
18
|
+
let kind = 'unknown';
|
|
19
|
+
try {
|
|
20
|
+
// SAFETY: parsed is a best-effort JSON.parse of legacy payload_json;
|
|
21
|
+
// an unexpected shape only yields undefined fields (falling back to
|
|
22
|
+
// 'unknown' below), and a parse failure is caught, so this never crashes.
|
|
23
|
+
const parsed = JSON.parse(row.payload_json);
|
|
24
|
+
tenant = parsed.tenant_id ?? 'unknown';
|
|
25
|
+
kind = parsed.kind ?? 'unknown';
|
|
26
|
+
}
|
|
27
|
+
catch {
|
|
28
|
+
// Unparseable legacy payload — redact with unknowns.
|
|
29
|
+
}
|
|
30
|
+
const redacted = JSON.stringify({
|
|
31
|
+
redacted: true,
|
|
32
|
+
archived_at: row.archived_at,
|
|
33
|
+
tenant_id: tenant,
|
|
34
|
+
kind,
|
|
35
|
+
reason: row.reason,
|
|
36
|
+
migration: 'v20_redact',
|
|
37
|
+
});
|
|
38
|
+
update.run(redacted, row.id);
|
|
39
|
+
}
|
|
40
|
+
},
|
|
41
|
+
};
|
|
42
|
+
//# sourceMappingURL=v20.js.map
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { tableHasColumn } from '../tables.js';
|
|
2
|
+
export const v21 = {
|
|
3
|
+
version: 21,
|
|
4
|
+
up: (db) => {
|
|
5
|
+
// v0.39 codex round 3: per-row mirror cleanup tracking. Replaces the
|
|
6
|
+
// global gdpr_v20_mirror_cleanup meta gate (which made the reaper
|
|
7
|
+
// one-shot and silently swallowed failed unlinks). With this column the
|
|
8
|
+
// reaper processes only rows WHERE mirror_cleaned_at IS NULL, sets the
|
|
9
|
+
// timestamp on success, and leaves it NULL on any unlink failure so the
|
|
10
|
+
// next openHippoDb retries automatically.
|
|
11
|
+
if (!tableHasColumn(db, 'raw_archive', 'mirror_cleaned_at')) {
|
|
12
|
+
db.exec(`ALTER TABLE raw_archive ADD COLUMN mirror_cleaned_at TEXT`);
|
|
13
|
+
}
|
|
14
|
+
},
|
|
15
|
+
};
|
|
16
|
+
//# sourceMappingURL=v21.js.map
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import { tableHasColumn } from '../tables.js';
|
|
2
|
+
export const v22 = {
|
|
3
|
+
version: 22,
|
|
4
|
+
up: (db) => {
|
|
5
|
+
// Tenant-isolation gap on continuity tables (codex review 2026-05-02).
|
|
6
|
+
// session_events and session_handoffs predate the v16 tenant migration
|
|
7
|
+
// and were never added to it, so the v0.40.0 provenance gate work
|
|
8
|
+
// exposed a real cross-tenant leak when continuity primitives are used.
|
|
9
|
+
// Adds tenant_id (NOT NULL DEFAULT 'default') with smart backfill from
|
|
10
|
+
// task_snapshots.session_id when unambiguous, plus an optional scope
|
|
11
|
+
// column so a private-channel-derived handoff can default-deny via the
|
|
12
|
+
// same rule recall already enforces.
|
|
13
|
+
//
|
|
14
|
+
// Self-heal partial-init stores: re-run the v4/v5 CREATE TABLE IF NOT
|
|
15
|
+
// EXISTS bodies before ALTERing. A silent skip would otherwise stamp
|
|
16
|
+
// schema_version=22 on a DB missing the underlying tables, leaving
|
|
17
|
+
// them permanently absent.
|
|
18
|
+
db.exec(`
|
|
19
|
+
CREATE TABLE IF NOT EXISTS session_events (
|
|
20
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
21
|
+
session_id TEXT NOT NULL,
|
|
22
|
+
task TEXT,
|
|
23
|
+
event_type TEXT NOT NULL,
|
|
24
|
+
content TEXT NOT NULL,
|
|
25
|
+
source TEXT NOT NULL,
|
|
26
|
+
metadata_json TEXT NOT NULL,
|
|
27
|
+
created_at TEXT NOT NULL
|
|
28
|
+
);
|
|
29
|
+
CREATE TABLE IF NOT EXISTS session_handoffs (
|
|
30
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
31
|
+
session_id TEXT NOT NULL,
|
|
32
|
+
repo_root TEXT,
|
|
33
|
+
task_id TEXT,
|
|
34
|
+
summary TEXT NOT NULL,
|
|
35
|
+
next_action TEXT,
|
|
36
|
+
artifacts_json TEXT NOT NULL DEFAULT '[]',
|
|
37
|
+
created_at TEXT NOT NULL
|
|
38
|
+
);
|
|
39
|
+
`);
|
|
40
|
+
if (!tableHasColumn(db, 'session_events', 'tenant_id')) {
|
|
41
|
+
db.exec(`ALTER TABLE session_events ADD COLUMN tenant_id TEXT NOT NULL DEFAULT 'default'`);
|
|
42
|
+
}
|
|
43
|
+
if (!tableHasColumn(db, 'session_events', 'scope')) {
|
|
44
|
+
db.exec(`ALTER TABLE session_events ADD COLUMN scope TEXT`);
|
|
45
|
+
}
|
|
46
|
+
if (!tableHasColumn(db, 'session_handoffs', 'tenant_id')) {
|
|
47
|
+
db.exec(`ALTER TABLE session_handoffs ADD COLUMN tenant_id TEXT NOT NULL DEFAULT 'default'`);
|
|
48
|
+
}
|
|
49
|
+
if (!tableHasColumn(db, 'session_handoffs', 'scope')) {
|
|
50
|
+
db.exec(`ALTER TABLE session_handoffs ADD COLUMN scope TEXT`);
|
|
51
|
+
}
|
|
52
|
+
// Smart backfill: rows whose session_id maps to exactly one tenant in
|
|
53
|
+
// task_snapshots inherit that tenant. Ambiguous or unmapped rows stay
|
|
54
|
+
// at the column default ('default'). Conservative: never crosses
|
|
55
|
+
// tenant boundaries on guesses. The COUNT(DISTINCT) gate is the load-
|
|
56
|
+
// bearing check; without it, rows with multiple tenants under the same
|
|
57
|
+
// session_id would silently pick whichever group came first.
|
|
58
|
+
db.exec(`
|
|
59
|
+
UPDATE session_events
|
|
60
|
+
SET tenant_id = (
|
|
61
|
+
SELECT MAX(t.tenant_id) FROM task_snapshots t
|
|
62
|
+
WHERE t.session_id = session_events.session_id
|
|
63
|
+
)
|
|
64
|
+
WHERE tenant_id = 'default'
|
|
65
|
+
AND (SELECT COUNT(DISTINCT t.tenant_id) FROM task_snapshots t
|
|
66
|
+
WHERE t.session_id = session_events.session_id) = 1
|
|
67
|
+
`);
|
|
68
|
+
db.exec(`
|
|
69
|
+
UPDATE session_handoffs
|
|
70
|
+
SET tenant_id = (
|
|
71
|
+
SELECT MAX(t.tenant_id) FROM task_snapshots t
|
|
72
|
+
WHERE t.session_id = session_handoffs.session_id
|
|
73
|
+
)
|
|
74
|
+
WHERE tenant_id = 'default'
|
|
75
|
+
AND (SELECT COUNT(DISTINCT t.tenant_id) FROM task_snapshots t
|
|
76
|
+
WHERE t.session_id = session_handoffs.session_id) = 1
|
|
77
|
+
`);
|
|
78
|
+
db.exec(`CREATE INDEX IF NOT EXISTS idx_session_events_tenant_session ON session_events(tenant_id, session_id, created_at DESC, id DESC)`);
|
|
79
|
+
db.exec(`CREATE INDEX IF NOT EXISTS idx_session_handoffs_tenant_session ON session_handoffs(tenant_id, session_id, created_at DESC)`);
|
|
80
|
+
},
|
|
81
|
+
};
|
|
82
|
+
//# sourceMappingURL=v22.js.map
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { tableHasColumn, tableExists } from '../tables.js';
|
|
2
|
+
export const v23 = {
|
|
3
|
+
version: 23,
|
|
4
|
+
up: (db) => {
|
|
5
|
+
// task_snapshots: add scope so all three continuity tables carry it.
|
|
6
|
+
// Self-heal partial-init stores via CREATE TABLE IF NOT EXISTS (the v22
|
|
7
|
+
// session_events / session_handoffs healing is upstream).
|
|
8
|
+
db.exec(`
|
|
9
|
+
CREATE TABLE IF NOT EXISTS task_snapshots (
|
|
10
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
11
|
+
task TEXT NOT NULL,
|
|
12
|
+
summary TEXT NOT NULL,
|
|
13
|
+
next_step TEXT NOT NULL,
|
|
14
|
+
status TEXT NOT NULL,
|
|
15
|
+
source TEXT NOT NULL,
|
|
16
|
+
session_id TEXT,
|
|
17
|
+
tenant_id TEXT NOT NULL DEFAULT 'default',
|
|
18
|
+
created_at TEXT NOT NULL,
|
|
19
|
+
updated_at TEXT NOT NULL
|
|
20
|
+
)
|
|
21
|
+
`);
|
|
22
|
+
if (!tableHasColumn(db, 'task_snapshots', 'scope')) {
|
|
23
|
+
db.exec(`ALTER TABLE task_snapshots ADD COLUMN scope TEXT`);
|
|
24
|
+
}
|
|
25
|
+
// Quarantine policy (codex round 1 P1): pre-existing continuity rows
|
|
26
|
+
// with NULL scope cannot be safely classified as public after the fact.
|
|
27
|
+
// Mark them 'unknown:legacy' so the api.recall + cmdRecall default-deny
|
|
28
|
+
// filter excludes them for no-scope callers. Fresh rows from new
|
|
29
|
+
// writers carry NULL when scope is unspecified (legitimate non-Slack
|
|
30
|
+
// writes); the 'unknown:legacy' marker is a v23-only one-shot for
|
|
31
|
+
// pre-upgrade rows.
|
|
32
|
+
//
|
|
33
|
+
// Run UPDATEs only on tables that exist (some test paths and edge stores
|
|
34
|
+
// skip v22's table healing). The UPDATEs are themselves idempotent via
|
|
35
|
+
// the WHERE scope IS NULL clause, so re-running is a no-op.
|
|
36
|
+
if (tableExists(db, 'task_snapshots')) {
|
|
37
|
+
db.exec(`UPDATE task_snapshots SET scope = 'unknown:legacy' WHERE scope IS NULL`);
|
|
38
|
+
}
|
|
39
|
+
if (tableExists(db, 'session_events')) {
|
|
40
|
+
db.exec(`UPDATE session_events SET scope = 'unknown:legacy' WHERE scope IS NULL`);
|
|
41
|
+
}
|
|
42
|
+
if (tableExists(db, 'session_handoffs')) {
|
|
43
|
+
db.exec(`UPDATE session_handoffs SET scope = 'unknown:legacy' WHERE scope IS NULL`);
|
|
44
|
+
}
|
|
45
|
+
db.exec(`CREATE INDEX IF NOT EXISTS idx_task_snapshots_tenant_scope ON task_snapshots(tenant_id, scope, status)`);
|
|
46
|
+
},
|
|
47
|
+
};
|
|
48
|
+
//# sourceMappingURL=v23.js.map
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
export const v24 = {
|
|
2
|
+
version: 24,
|
|
3
|
+
up: (db) => {
|
|
4
|
+
// v1.3.0 GitHub connector schema (codex round 1, 2026-05-04).
|
|
5
|
+
// Six tables + a min_compatible_binary meta row for rollback safety.
|
|
6
|
+
db.exec(`
|
|
7
|
+
CREATE TABLE IF NOT EXISTS github_event_log (
|
|
8
|
+
idempotency_key TEXT PRIMARY KEY,
|
|
9
|
+
delivery_id TEXT NOT NULL,
|
|
10
|
+
event_name TEXT NOT NULL,
|
|
11
|
+
ingested_at TEXT NOT NULL,
|
|
12
|
+
memory_id TEXT
|
|
13
|
+
)
|
|
14
|
+
`);
|
|
15
|
+
db.exec(`CREATE INDEX IF NOT EXISTS idx_github_event_log_memory ON github_event_log(memory_id) WHERE memory_id IS NOT NULL`);
|
|
16
|
+
db.exec(`CREATE INDEX IF NOT EXISTS idx_github_event_log_delivery ON github_event_log(delivery_id)`);
|
|
17
|
+
db.exec(`
|
|
18
|
+
CREATE TABLE IF NOT EXISTS github_cursors (
|
|
19
|
+
tenant_id TEXT NOT NULL,
|
|
20
|
+
repo_full_name TEXT NOT NULL,
|
|
21
|
+
issues_hwm TEXT,
|
|
22
|
+
issue_comments_hwm TEXT,
|
|
23
|
+
pr_review_comments_hwm TEXT,
|
|
24
|
+
updated_at TEXT NOT NULL,
|
|
25
|
+
PRIMARY KEY (tenant_id, repo_full_name)
|
|
26
|
+
)
|
|
27
|
+
`);
|
|
28
|
+
db.exec(`
|
|
29
|
+
CREATE TABLE IF NOT EXISTS github_dlq (
|
|
30
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
31
|
+
tenant_id TEXT NOT NULL,
|
|
32
|
+
raw_payload TEXT NOT NULL,
|
|
33
|
+
error TEXT NOT NULL,
|
|
34
|
+
event_name TEXT,
|
|
35
|
+
delivery_id TEXT,
|
|
36
|
+
signature TEXT,
|
|
37
|
+
installation_id TEXT,
|
|
38
|
+
repo_full_name TEXT,
|
|
39
|
+
retry_count INTEGER NOT NULL DEFAULT 0,
|
|
40
|
+
received_at TEXT NOT NULL,
|
|
41
|
+
retried_at TEXT,
|
|
42
|
+
bucket TEXT NOT NULL DEFAULT 'parse_error'
|
|
43
|
+
)
|
|
44
|
+
`);
|
|
45
|
+
db.exec(`CREATE INDEX IF NOT EXISTS idx_github_dlq_tenant_received ON github_dlq(tenant_id, received_at)`);
|
|
46
|
+
db.exec(`
|
|
47
|
+
CREATE TABLE IF NOT EXISTS github_installations (
|
|
48
|
+
installation_id TEXT PRIMARY KEY,
|
|
49
|
+
tenant_id TEXT NOT NULL,
|
|
50
|
+
added_at TEXT NOT NULL
|
|
51
|
+
)
|
|
52
|
+
`);
|
|
53
|
+
// PAT-mode multi-tenant routing (codex P0 #4). Maps repo_full_name to
|
|
54
|
+
// tenant when the webhook envelope has no `installation` field. Composite
|
|
55
|
+
// PK so the same repo can intentionally be visible to multiple tenants
|
|
56
|
+
// (e.g., shared tooling accounts) — collision is on (repo, tenant) pair.
|
|
57
|
+
db.exec(`
|
|
58
|
+
CREATE TABLE IF NOT EXISTS github_repositories (
|
|
59
|
+
repo_full_name TEXT NOT NULL,
|
|
60
|
+
tenant_id TEXT NOT NULL,
|
|
61
|
+
added_at TEXT NOT NULL,
|
|
62
|
+
PRIMARY KEY (repo_full_name, tenant_id)
|
|
63
|
+
)
|
|
64
|
+
`);
|
|
65
|
+
// Rollback-safety guard (codex P0 #2). Any binary < 1.2.1 lacks the
|
|
66
|
+
// generic *:private:* default-deny and would leak github:private:* rows
|
|
67
|
+
// if it opened this DB. The startup guard in v1.2.1+ refuses to open a
|
|
68
|
+
// DB whose min_compatible_binary is newer than its own version.
|
|
69
|
+
db.prepare(`INSERT INTO meta(key, value) VALUES('min_compatible_binary', ?) ON CONFLICT(key) DO UPDATE SET value=excluded.value`).run('1.2.1');
|
|
70
|
+
},
|
|
71
|
+
};
|
|
72
|
+
//# sourceMappingURL=v24.js.map
|