hippo-memory 1.70.0 → 1.71.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/agent-memories/claude-code.d.ts +4 -2
- package/dist/agent-memories/claude-code.js +14 -5
- package/dist/agent-memories/files.js +23 -12
- package/dist/agent-memories/markdown.d.ts +1 -3
- package/dist/agent-memories/markdown.js +1 -3
- package/dist/agent-memories/report.js +2 -1
- package/dist/agent-memories/sync.d.ts +4 -2
- package/dist/agent-memories/sync.js +10 -5
- package/dist/api/assemble.d.ts +7 -44
- package/dist/api/assemble.js +2 -22
- package/dist/api/audit.d.ts +5 -1
- package/dist/api/audit.js +9 -1
- package/dist/api/auth.d.ts +13 -22
- package/dist/api/auth.js +34 -24
- package/dist/api/auto-sleep.js +2 -2
- package/dist/api/availability.d.ts +2 -15
- package/dist/api/availability.js +2 -15
- package/dist/api/context-select.js +3 -4
- package/dist/api/context-types.d.ts +10 -35
- package/dist/api/context.d.ts +5 -22
- package/dist/api/context.js +21 -38
- package/dist/api/dormant.d.ts +5 -21
- package/dist/api/dormant.js +7 -26
- package/dist/api/drill-down.d.ts +7 -46
- package/dist/api/drill-down.js +5 -26
- package/dist/api/forget.d.ts +5 -24
- package/dist/api/forget.js +5 -28
- package/dist/api/graph.d.ts +8 -0
- package/dist/api/graph.js +7 -0
- package/dist/api/index.d.ts +2 -0
- package/dist/api/index.js +2 -0
- package/dist/api/instruction-detect.js +16 -5
- package/dist/api/ledger-db.d.ts +2 -1
- package/dist/api/ledger-db.js +5 -3
- package/dist/api/memories.d.ts +5 -0
- package/dist/api/memories.js +7 -0
- package/dist/api/objects.d.ts +9 -0
- package/dist/api/objects.js +11 -0
- package/dist/api/on-store.js +5 -3
- package/dist/api/predictions.d.ts +9 -0
- package/dist/api/predictions.js +18 -0
- package/dist/api/promote.d.ts +13 -17
- package/dist/api/promote.js +11 -19
- package/dist/api/prompt-hook.d.ts +4 -4
- package/dist/api/prompt-hook.js +10 -9
- package/dist/api/recall-cli.d.ts +55 -0
- package/dist/api/recall-cli.js +94 -0
- package/dist/api/recall-core.js +14 -6
- package/dist/api/recall-finish.d.ts +53 -0
- package/dist/api/recall-finish.js +30 -0
- package/dist/api/recall-history.d.ts +17 -84
- package/dist/api/recall-history.js +15 -88
- package/dist/api/recall-pipeline.d.ts +2 -3
- package/dist/api/recall-pipeline.js +16 -9
- package/dist/api/recall-types.d.ts +64 -304
- package/dist/api/recall.d.ts +5 -33
- package/dist/api/recall.js +59 -60
- package/dist/api/refine.d.ts +7 -0
- package/dist/api/refine.js +10 -0
- package/dist/api/remember-local.d.ts +57 -0
- package/dist/api/remember-local.js +90 -0
- package/dist/api/remember.d.ts +18 -1
- package/dist/api/remember.js +13 -1
- package/dist/api/sleep-run.d.ts +1 -3
- package/dist/api/sleep-run.js +17 -21
- package/dist/api/sleep.d.ts +9 -28
- package/dist/api/tokens.d.ts +3 -10
- package/dist/api/tokens.js +3 -10
- package/dist/api/types.d.ts +6 -29
- package/dist/api/types.js +4 -22
- package/dist/capture/command.d.ts +4 -12
- package/dist/capture/command.js +6 -22
- package/dist/capture/compact.d.ts +4 -15
- package/dist/capture/compact.js +16 -25
- package/dist/capture/compaction-record.js +101 -69
- package/dist/capture/compaction-spool.d.ts +1 -1
- package/dist/capture/compaction-spool.js +1 -1
- package/dist/capture/session-digest.d.ts +1 -1
- package/dist/capture/session-digest.js +13 -7
- package/dist/capture/transcript.d.ts +2 -10
- package/dist/capture/transcript.js +4 -18
- package/dist/cli/api-context.d.ts +3 -0
- package/dist/cli/api-context.js +6 -0
- package/dist/cli/audit-prune.d.ts +6 -39
- package/dist/cli/audit-prune.js +6 -39
- package/dist/cli/audit.d.ts +1 -1
- package/dist/cli/audit.js +33 -34
- package/dist/cli/auth.d.ts +2 -2
- package/dist/cli/auth.js +57 -39
- package/dist/cli/briefs.d.ts +4 -4
- package/dist/cli/briefs.js +18 -22
- package/dist/cli/card.d.ts +2 -2
- package/dist/cli/card.js +31 -32
- package/dist/cli/client.d.ts +7 -27
- package/dist/cli/client.js +24 -43
- package/dist/cli/compact-resume-payload.js +3 -2
- package/dist/cli/context.d.ts +1 -2
- package/dist/cli/context.js +12 -8
- package/dist/cli/continuity.d.ts +6 -6
- package/dist/cli/continuity.js +62 -64
- package/dist/cli/correction-latency.d.ts +2 -14
- package/dist/cli/correction-latency.js +2 -14
- package/dist/cli/curate.d.ts +13 -17
- package/dist/cli/curate.js +68 -92
- package/dist/cli/dag.d.ts +4 -4
- package/dist/cli/dag.js +33 -27
- package/dist/cli/decisions.d.ts +4 -4
- package/dist/cli/decisions.js +33 -47
- package/dist/cli/eval.js +15 -13
- package/dist/cli/exit.d.ts +6 -0
- package/dist/cli/exit.js +11 -0
- package/dist/cli/explain.d.ts +1 -2
- package/dist/cli/explain.js +6 -4
- package/dist/cli/flag-values.d.ts +6 -1
- package/dist/cli/flag-values.js +27 -10
- package/dist/cli/flags.d.ts +1 -0
- package/dist/cli/flags.js +1 -1
- package/dist/cli/github.d.ts +14 -0
- package/dist/{connectors/github/cli-impl.js → cli/github.js} +43 -71
- package/dist/cli/goals.d.ts +2 -2
- package/dist/cli/goals.js +46 -50
- package/dist/cli/hook-runtime.d.ts +9 -27
- package/dist/cli/hook-runtime.js +15 -31
- package/dist/cli/init.d.ts +2 -2
- package/dist/cli/init.js +6 -12
- package/dist/cli/install-steps.js +3 -12
- package/dist/cli/last-sleep.d.ts +2 -1
- package/dist/cli/last-sleep.js +3 -0
- package/dist/cli/maintenance.d.ts +4 -4
- package/dist/cli/maintenance.js +14 -19
- package/dist/cli/object-verbs.js +4 -3
- package/dist/cli/owner-validation.d.ts +5 -28
- package/dist/cli/owner-validation.js +5 -28
- package/dist/cli/playbooks.d.ts +4 -4
- package/dist/cli/playbooks.js +23 -28
- package/dist/cli/print.d.ts +2 -5
- package/dist/cli/print.js +1 -4
- package/dist/cli/projects.d.ts +2 -2
- package/dist/cli/projects.js +1 -3
- package/dist/cli/provenance-coverage.d.ts +2 -6
- package/dist/cli/provenance-coverage.js +2 -6
- package/dist/cli/quality-repair-once.js +2 -2
- package/dist/cli/recall.d.ts +2 -4
- package/dist/cli/recall.js +55 -131
- package/dist/cli/refine-llm.d.ts +5 -31
- package/dist/cli/refine-llm.js +9 -36
- package/dist/cli/remember.d.ts +3 -3
- package/dist/cli/remember.js +122 -180
- package/dist/cli/scheduler.d.ts +2 -17
- package/dist/cli/scheduler.js +12 -18
- package/dist/cli/serve.js +21 -12
- package/dist/cli/session-hooks.d.ts +10 -18
- package/dist/cli/session-hooks.js +112 -113
- package/dist/cli/setup.d.ts +4 -4
- package/dist/cli/setup.js +19 -21
- package/dist/cli/shared.d.ts +9 -23
- package/dist/cli/shared.js +9 -32
- package/dist/cli/slack.d.ts +2 -2
- package/dist/cli/slack.js +19 -23
- package/dist/cli/sleep.d.ts +3 -2
- package/dist/cli/sleep.js +15 -16
- package/dist/cli/status.d.ts +9 -12
- package/dist/cli/status.js +55 -98
- package/dist/cli/stdin.d.ts +4 -6
- package/dist/cli/stdin.js +2 -3
- package/dist/cli/transfer.d.ts +9 -9
- package/dist/cli/transfer.js +66 -89
- package/dist/cli/usage.js +11 -5
- package/dist/cli.d.ts +66 -448
- package/dist/cli.js +87 -263
- package/dist/connectors/github/backfill.d.ts +5 -25
- package/dist/connectors/github/backfill.js +14 -49
- package/dist/connectors/github/deletion.d.ts +4 -18
- package/dist/connectors/github/deletion.js +2 -15
- package/dist/connectors/github/dlq.d.ts +8 -33
- package/dist/connectors/github/dlq.js +12 -29
- package/dist/connectors/github/ingest.d.ts +2 -6
- package/dist/connectors/github/ingest.js +4 -10
- package/dist/connectors/github/octokit-client.d.ts +4 -16
- package/dist/connectors/github/octokit-client.js +27 -24
- package/dist/connectors/github/ratelimit.d.ts +3 -14
- package/dist/connectors/github/ratelimit.js +3 -14
- package/dist/connectors/github/scope.d.ts +3 -5
- package/dist/connectors/github/scope.js +3 -5
- package/dist/connectors/github/signature.d.ts +4 -26
- package/dist/connectors/github/signature.js +4 -26
- package/dist/connectors/github/tenant-routing.d.ts +2 -24
- package/dist/connectors/github/tenant-routing.js +4 -26
- package/dist/connectors/github/transform.js +2 -16
- package/dist/connectors/github/types.d.ts +3 -15
- package/dist/connectors/github/types.js +2 -9
- package/dist/connectors/github/webhook.d.ts +2 -16
- package/dist/connectors/github/webhook.js +6 -22
- package/dist/connectors/slack/backfill.d.ts +4 -17
- package/dist/connectors/slack/backfill.js +4 -13
- package/dist/connectors/slack/dlq.d.ts +2 -19
- package/dist/connectors/slack/dlq.js +2 -19
- package/dist/connectors/slack/ingest.d.ts +2 -3
- package/dist/connectors/slack/ingest.js +2 -3
- package/dist/connectors/slack/scope.d.ts +2 -8
- package/dist/connectors/slack/scope.js +2 -8
- package/dist/connectors/slack/signature.d.ts +1 -6
- package/dist/connectors/slack/tenant-routing.d.ts +2 -19
- package/dist/connectors/slack/tenant-routing.js +2 -21
- package/dist/connectors/slack/transform.d.ts +2 -18
- package/dist/connectors/slack/transform.js +2 -18
- package/dist/connectors/slack/types.d.ts +3 -9
- package/dist/connectors/slack/types.js +2 -4
- package/dist/connectors/slack/web-client.js +33 -27
- package/dist/connectors/slack/webhook.d.ts +2 -19
- package/dist/connectors/slack/webhook.js +5 -26
- package/dist/connectors/slack/workspaces.d.ts +4 -24
- package/dist/connectors/slack/workspaces.js +4 -24
- package/dist/consolidate/conflicts.js +6 -14
- package/dist/consolidate/dag-summary.d.ts +8 -0
- package/dist/consolidate/dag-summary.js +41 -0
- package/dist/consolidate/dag.d.ts +5 -28
- package/dist/consolidate/dag.js +14 -75
- package/dist/consolidate/decay.js +7 -19
- package/dist/consolidate/dedupe.d.ts +6 -52
- package/dist/consolidate/dedupe.js +13 -71
- package/dist/consolidate/flush-units.d.ts +3 -4
- package/dist/consolidate/flush-units.js +3 -3
- package/dist/consolidate/half-life-migration.d.ts +3 -26
- package/dist/consolidate/half-life-migration.js +11 -28
- package/dist/consolidate/llm-passes.js +4 -21
- package/dist/consolidate/memory-value-weights.d.ts +2 -13
- package/dist/consolidate/memory-value-weights.js +2 -13
- package/dist/consolidate/memory-value.d.ts +11 -84
- package/dist/consolidate/memory-value.js +16 -104
- package/dist/consolidate/merge.js +10 -31
- package/dist/consolidate/merged-row.js +2 -1
- package/dist/consolidate/physics-pass.js +1 -3
- package/dist/consolidate/replay.d.ts +6 -38
- package/dist/consolidate/replay.js +14 -52
- package/dist/consolidate/run.js +1 -1
- package/dist/consolidate/sleep.d.ts +1 -8
- package/dist/consolidate/sleep.js +5 -17
- package/dist/consolidate/trace.d.ts +3 -18
- package/dist/consolidate/trace.js +3 -18
- package/dist/consolidate/traces.js +6 -22
- package/dist/core/ablation.d.ts +4 -91
- package/dist/core/ablation.js +4 -91
- package/dist/core/ambient.d.ts +1 -8
- package/dist/core/ambient.js +1 -8
- package/dist/core/capture-contract.d.ts +4 -2
- package/dist/core/capture-contract.js +4 -2
- package/dist/core/card.d.ts +4 -1
- package/dist/core/card.js +8 -0
- package/dist/core/compare.d.ts +11 -67
- package/dist/core/compare.js +9 -63
- package/dist/core/config.d.ts +10 -24
- package/dist/core/config.js +13 -14
- package/dist/core/handoff.d.ts +1 -7
- package/dist/core/handoff.js +1 -7
- package/dist/core/memory-quality.js +1 -1
- package/dist/core/memory.d.ts +41 -164
- package/dist/core/memory.js +51 -221
- package/dist/core/package-root.d.ts +3 -0
- package/dist/core/package-root.js +5 -0
- package/dist/core/physics-config.d.ts +1 -4
- package/dist/core/physics-config.js +3 -8
- package/dist/core/physics.d.ts +15 -61
- package/dist/core/physics.js +59 -122
- package/dist/core/project-identity.d.ts +17 -58
- package/dist/core/project-identity.js +17 -38
- package/dist/core/project-remote.js +13 -2
- package/dist/core/raw-append-only.d.ts +5 -0
- package/dist/core/raw-append-only.js +7 -0
- package/dist/core/salience.d.ts +1 -7
- package/dist/core/salience.js +1 -7
- package/dist/dashboard/dashboard-actions.js +2 -2
- package/dist/dashboard/dashboard-snapshot.d.ts +2 -1
- package/dist/dashboard/dashboard-snapshot.js +11 -2
- package/dist/dashboard/dashboard-types.d.ts +2 -1
- package/dist/dashboard/dashboard.d.ts +1 -0
- package/dist/dashboard/dashboard.js +50 -4
- package/dist/db/busy.d.ts +1 -1
- package/dist/db/busy.js +17 -8
- package/dist/db/connect.d.ts +1 -0
- package/dist/db/connect.js +3 -3
- package/dist/db/migrate.js +3 -3
- package/dist/db/migrations/types.d.ts +2 -5
- package/dist/db/migrations/v14.js +2 -3
- package/dist/db/migrations/v15.js +2 -8
- package/dist/db/migrations/v16.js +2 -3
- package/dist/db/migrations/v17.js +2 -3
- package/dist/db/migrations/v19.js +2 -5
- package/dist/db/migrations/v20.js +2 -7
- package/dist/db/migrations/v22.js +4 -17
- package/dist/db/migrations/v23.js +3 -14
- package/dist/db/migrations/v24.js +2 -4
- package/dist/db/migrations/v25.js +3 -8
- package/dist/db/migrations/v26.js +2 -13
- package/dist/db/migrations/v27.js +3 -11
- package/dist/db/migrations/v28.js +2 -14
- package/dist/db/migrations/v29.js +4 -18
- package/dist/db/migrations/v30.js +4 -16
- package/dist/db/migrations/v31.js +2 -15
- package/dist/db/migrations/v32.js +4 -22
- package/dist/db/migrations/v33.js +2 -15
- package/dist/db/migrations/v34.js +2 -11
- package/dist/db/migrations/v35.js +2 -11
- package/dist/db/migrations/v36.js +2 -11
- package/dist/db/migrations/v37.js +8 -33
- package/dist/db/migrations/v38.js +5 -38
- package/dist/db/migrations/v39.js +9 -20
- package/dist/db/migrations/v40.js +2 -9
- package/dist/db/migrations/v41.js +2 -24
- package/dist/db/migrations/v43.js +1 -1
- package/dist/db/migrations/v44.js +2 -8
- package/dist/db/migrations/v45.js +2 -7
- package/dist/db/migrations/v47.js +2 -3
- package/dist/db/migrations/v51.js +1 -1
- package/dist/db/open.d.ts +2 -0
- package/dist/db/open.js +17 -1
- package/dist/db/physics-state.d.ts +6 -22
- package/dist/db/physics-state.js +25 -36
- package/dist/db/raw-archive-mirror-cleanup.d.ts +2 -17
- package/dist/db/raw-archive-mirror-cleanup.js +2 -17
- package/dist/db/vector-store.d.ts +2 -0
- package/dist/db/vector-store.js +8 -1
- package/dist/doctor.js +74 -19
- package/dist/entry/session-text.js +2 -1
- package/dist/eval/eval-stats.d.ts +15 -53
- package/dist/eval/eval-stats.js +12 -42
- package/dist/eval/eval-suite.d.ts +2 -13
- package/dist/eval/eval-suite.js +74 -34
- package/dist/eval/eval.d.ts +6 -24
- package/dist/eval/eval.js +7 -34
- package/dist/eval/judgment.d.ts +0 -3
- package/dist/eval/judgment.js +19 -11
- package/dist/extensions/openclaw-plugin/index.js +1 -1
- package/dist/graph/extract.d.ts +5 -27
- package/dist/graph/extract.js +7 -33
- package/dist/graph/recall.d.ts +7 -20
- package/dist/graph/recall.js +14 -76
- package/dist/graph/stream.d.ts +7 -39
- package/dist/graph/stream.js +11 -34
- package/dist/graph/view.d.ts +9 -35
- package/dist/graph/view.js +11 -39
- package/dist/hooks/codex-wrapper.js +2 -2
- package/dist/hooks/copilot.js +2 -1
- package/dist/hooks/hook-blocks.d.ts +6 -2
- package/dist/hooks/hook-blocks.js +37 -124
- package/dist/hooks/json-hooks.d.ts +4 -36
- package/dist/hooks/json-hooks.js +18 -57
- package/dist/hooks/opencode.d.ts +0 -38
- package/dist/hooks/opencode.js +9 -76
- package/dist/hooks/shared.d.ts +8 -17
- package/dist/hooks/shared.js +29 -20
- package/dist/importers/core.d.ts +12 -37
- package/dist/importers/core.js +9 -27
- package/dist/importers/markdown-parse.d.ts +8 -22
- package/dist/importers/markdown-parse.js +8 -25
- package/dist/importers/markdown.js +3 -12
- package/dist/importers/sources.js +7 -35
- package/dist/importers/vault.d.ts +2 -8
- package/dist/importers/vault.js +25 -81
- package/dist/index.d.ts +6 -2
- package/dist/index.js +6 -2
- package/dist/learn/autolearn.d.ts +14 -41
- package/dist/learn/autolearn.js +14 -41
- package/dist/learn/extract.js +2 -4
- package/dist/learn/forward-claim-detector.d.ts +6 -30
- package/dist/learn/forward-claim-detector.js +14 -66
- package/dist/learn/invalidation.d.ts +6 -18
- package/dist/learn/invalidation.js +9 -26
- package/dist/mcp/admin-tools.js +3 -5
- package/dist/mcp/memory-tools.js +4 -9
- package/dist/mcp/protocol.d.ts +8 -26
- package/dist/mcp/protocol.js +3 -6
- package/dist/mcp/recall-tools.js +3 -3
- package/dist/mcp/request.d.ts +3 -11
- package/dist/mcp/request.js +10 -26
- package/dist/mcp/server.d.ts +3 -9
- package/dist/mcp/server.js +5 -16
- package/dist/mcp/session-state.d.ts +1 -1
- package/dist/mcp/session-state.js +5 -11
- package/dist/mcp/stdio.d.ts +2 -6
- package/dist/mcp/stdio.js +48 -12
- package/dist/mcp/tools.js +5 -3
- package/dist/objects/customer-notes.d.ts +7 -42
- package/dist/objects/customer-notes.js +7 -48
- package/dist/objects/decisions.d.ts +12 -50
- package/dist/objects/decisions.js +15 -53
- package/dist/objects/incidents.d.ts +7 -38
- package/dist/objects/incidents.js +7 -41
- package/dist/objects/policies.d.ts +11 -89
- package/dist/objects/policies.js +11 -98
- package/dist/objects/processes.d.ts +7 -52
- package/dist/objects/processes.js +7 -61
- package/dist/objects/project-briefs.d.ts +11 -55
- package/dist/objects/project-briefs.js +14 -75
- package/dist/objects/skills.d.ts +7 -42
- package/dist/objects/skills.js +8 -54
- package/dist/postinstall.js +6 -19
- package/dist/predictions/planning-fallacy.d.ts +11 -34
- package/dist/rerankers/clef.js +3 -31
- package/dist/rerankers/cross-encoder.js +4 -6
- package/dist/rerankers/jev.js +9 -6
- package/dist/rerankers/llm.d.ts +2 -11
- package/dist/rerankers/llm.js +14 -14
- package/dist/rerankers/outage-warning.d.ts +2 -1
- package/dist/rerankers/outage-warning.js +2 -1
- package/dist/rerankers/remote.d.ts +1 -0
- package/dist/rerankers/remote.js +2 -0
- package/dist/rerankers/types.d.ts +2 -14
- package/dist/search/boosts.d.ts +0 -2
- package/dist/search/boosts.js +2 -2
- package/dist/search/goal-boost.d.ts +23 -0
- package/dist/search/goal-boost.js +90 -0
- package/dist/search/hybrid.d.ts +2 -0
- package/dist/search/multihop.js +2 -3
- package/dist/search/path-context.d.ts +5 -18
- package/dist/search/path-context.js +5 -18
- package/dist/search/physics-search.js +11 -8
- package/dist/search/rrf.d.ts +7 -35
- package/dist/search/rrf.js +5 -30
- package/dist/search/vector.d.ts +7 -0
- package/dist/search/vector.js +35 -5
- package/dist/server/auth.d.ts +9 -28
- package/dist/server/auth.js +32 -25
- package/dist/server/boot.d.ts +2 -21
- package/dist/server/boot.js +63 -96
- package/dist/server/client-ip.d.ts +3 -19
- package/dist/server/client-ip.js +5 -28
- package/dist/server/defaults.d.ts +3 -0
- package/dist/server/defaults.js +4 -0
- package/dist/server/key-check-bounds.d.ts +2 -1
- package/dist/server/lifecycle.d.ts +5 -4
- package/dist/server/lifecycle.js +19 -4
- package/dist/server/mcp-http.js +10 -44
- package/dist/server/rate-limit.d.ts +5 -18
- package/dist/server/rate-limit.js +4 -13
- package/dist/server/request.d.ts +4 -8
- package/dist/server/request.js +9 -17
- package/dist/server/route-table.js +42 -49
- package/dist/server/routes/admin.js +22 -28
- package/dist/server/routes/customer-notes.js +7 -12
- package/dist/server/routes/decisions.js +10 -17
- package/dist/server/routes/incidents.js +12 -20
- package/dist/server/routes/memories.js +12 -32
- package/dist/server/routes/object-routes.d.ts +0 -5
- package/dist/server/routes/object-routes.js +7 -15
- package/dist/server/routes/policies.js +10 -18
- package/dist/server/routes/predictions.js +13 -25
- package/dist/server/routes/processes.js +16 -26
- package/dist/server/routes/project-briefs.js +9 -16
- package/dist/server/routes/recall.js +10 -35
- package/dist/server/routes/skills.js +8 -18
- package/dist/server/server-detect.d.ts +9 -53
- package/dist/server/server-detect.js +24 -90
- package/dist/server/sleep-offload.js +4 -1
- package/dist/server/types.d.ts +12 -10
- package/dist/server/validation.d.ts +3 -1
- package/dist/server/validation.js +10 -23
- package/dist/server.d.ts +2 -2
- package/dist/server.js +3 -2
- package/dist/sharing/global-store.d.ts +19 -0
- package/dist/sharing/global-store.js +75 -0
- package/dist/sharing/global-sync.d.ts +6 -0
- package/dist/sharing/global-sync.js +80 -0
- package/dist/sharing/project-merge.d.ts +4 -5
- package/dist/sharing/project-merge.js +9 -7
- package/dist/sharing/scope.d.ts +4 -11
- package/dist/sharing/scope.js +4 -11
- package/dist/sharing/search-both.d.ts +60 -0
- package/dist/sharing/search-both.js +138 -0
- package/dist/sharing/share.d.ts +38 -0
- package/dist/sharing/share.js +226 -0
- package/dist/store/ambient.js +4 -9
- package/dist/store/audit-event.d.ts +4 -12
- package/dist/store/audit-event.js +4 -12
- package/dist/store/audit.d.ts +2 -5
- package/dist/store/audit.js +4 -12
- package/dist/store/auth.d.ts +6 -6
- package/dist/store/auth.js +10 -9
- package/dist/store/candidates.d.ts +20 -3
- package/dist/store/candidates.js +77 -48
- package/dist/store/card-detail.d.ts +2 -1
- package/dist/store/card-detail.js +2 -1
- package/dist/store/cards.d.ts +14 -9
- package/dist/store/cards.js +72 -126
- package/dist/store/conflicts.d.ts +4 -21
- package/dist/store/conflicts.js +71 -150
- package/dist/store/connectors/github.d.ts +10 -10
- package/dist/store/connectors/github.js +10 -10
- package/dist/store/dashboard-reads.js +4 -8
- package/dist/store/delete-and-batch.d.ts +11 -31
- package/dist/store/delete-and-batch.js +48 -64
- package/dist/store/delivery-recorder.d.ts +8 -4
- package/dist/store/delivery-recorder.js +25 -15
- package/dist/store/diagnostics.js +6 -13
- package/dist/store/dormant.d.ts +7 -29
- package/dist/store/dormant.js +15 -56
- package/dist/store/embeddings/index.d.ts +11 -80
- package/dist/store/embeddings/index.js +71 -207
- package/dist/store/embeddings/local.js +15 -32
- package/dist/store/embeddings/provider.d.ts +16 -53
- package/dist/store/embeddings/provider.js +41 -69
- package/dist/store/entry-reads.d.ts +21 -57
- package/dist/store/entry-reads.js +65 -126
- package/dist/store/entry-row.d.ts +6 -35
- package/dist/store/entry-row.js +9 -37
- package/dist/store/entry-writes.d.ts +10 -16
- package/dist/store/entry-writes.js +17 -35
- package/dist/store/goals.d.ts +3 -40
- package/dist/store/goals.js +21 -160
- package/dist/store/graph-queue.d.ts +6 -22
- package/dist/store/graph-queue.js +14 -45
- package/dist/store/graph-reads.d.ts +11 -35
- package/dist/store/graph-reads.js +20 -58
- package/dist/store/graph-rows.d.ts +3 -6
- package/dist/store/graph-rows.js +6 -9
- package/dist/store/graph-view-rows.d.ts +2 -1
- package/dist/store/graph-view-rows.js +2 -1
- package/dist/store/graph-writes.d.ts +6 -31
- package/dist/store/graph-writes.js +13 -37
- package/dist/store/half-life.d.ts +2 -1
- package/dist/store/half-life.js +14 -16
- package/dist/store/handoffs.d.ts +5 -11
- package/dist/store/handoffs.js +16 -34
- package/dist/store/index-and-stats.d.ts +6 -19
- package/dist/store/index-and-stats.js +34 -82
- package/dist/store/markdown.d.ts +2 -6
- package/dist/store/markdown.js +21 -20
- package/dist/store/mirrors.d.ts +2 -6
- package/dist/store/mirrors.js +14 -23
- package/dist/store/open.js +6 -13
- package/dist/store/planning-fallacy-evidence.d.ts +2 -30
- package/dist/store/planning-fallacy-evidence.js +8 -37
- package/dist/store/port.d.ts +82 -79
- package/dist/store/predictions.d.ts +11 -51
- package/dist/store/predictions.js +38 -119
- package/dist/{cli → store}/quality-repair.js +15 -31
- package/dist/store/raw-archive.d.ts +4 -16
- package/dist/store/raw-archive.js +14 -29
- package/dist/store/recall-scope.d.ts +19 -79
- package/dist/store/recall-scope.js +21 -82
- package/dist/store/recall-trace.d.ts +10 -77
- package/dist/store/recall-trace.js +19 -95
- package/dist/store/rejected-values.js +7 -19
- package/dist/store/rejection.d.ts +12 -58
- package/dist/store/rejection.js +13 -65
- package/dist/store/report-reads.d.ts +6 -0
- package/dist/store/report-reads.js +29 -0
- package/dist/store/rows.d.ts +9 -19
- package/dist/store/rows.js +36 -34
- package/dist/store/rule-sql.d.ts +5 -0
- package/dist/store/rule-sql.js +37 -0
- package/dist/store/search-rows.d.ts +7 -38
- package/dist/store/search-rows.js +14 -50
- package/dist/store/sessions.d.ts +10 -47
- package/dist/store/sessions.js +17 -73
- package/dist/store/sqlite/connector-events-group.js +2 -2
- package/dist/store/sqlite/entry-writes-group.js +2 -2
- package/dist/store/sqlite/error-codec.js +4 -2
- package/dist/store/sqlite/executor.d.ts +2 -1
- package/dist/store/sqlite/executor.js +2 -1
- package/dist/store/sqlite/local.d.ts +3 -3
- package/dist/store/sqlite/local.js +1 -0
- package/dist/store/sqlite/object-rows.js +6 -3
- package/dist/store/sqlite/objects-group.js +4 -2
- package/dist/store/sqlite/quarantine-group.js +2 -2
- package/dist/store/sqlite/store.d.ts +1 -4
- package/dist/store/sqlite/store.js +2 -3
- package/dist/store/sqlite/vector-reads-group.js +2 -2
- package/dist/store/sqlite/worker-jobs.js +1 -1
- package/dist/store/sqlite/worker-ops.d.ts +13 -2
- package/dist/store/sqlite/worker-ops.js +13 -2
- package/dist/store/sqlite/worker-store.js +5 -2
- package/dist/store/summaries.d.ts +10 -62
- package/dist/store/summaries.js +34 -146
- package/dist/store/summary-dirty.js +1 -1
- package/dist/store/tenant-lookup.d.ts +6 -1
- package/dist/store/tenant-lookup.js +7 -0
- package/dist/store/tenant.d.ts +2 -16
- package/dist/store/tenant.js +4 -19
- package/dist/store/token-ledger.d.ts +13 -43
- package/dist/store/token-ledger.js +19 -50
- package/dist/store/usage-reports.js +5 -13
- package/dist/store/vector-index.d.ts +46 -0
- package/dist/store/vector-index.js +170 -0
- package/dist/store/working-memory.d.ts +6 -25
- package/dist/store/working-memory.js +18 -52
- package/dist/store/yaml.d.ts +1 -5
- package/dist/store/yaml.js +2 -6
- package/dist/support-bundle.js +7 -5
- package/dist/trust/reject-flow.js +1 -3
- package/dist/util/anthropic-messages.js +14 -2
- package/dist/util/atomic-write.d.ts +2 -1
- package/dist/util/atomic-write.js +35 -4
- package/dist/util/capped-json.d.ts +6 -0
- package/dist/util/capped-json.js +46 -0
- package/dist/util/crash-handlers.d.ts +8 -1
- package/dist/util/crash-handlers.js +52 -10
- package/dist/util/env.d.ts +13 -6
- package/dist/util/env.js +14 -7
- package/dist/util/home-path.d.ts +2 -1
- package/dist/util/home-path.js +4 -2
- package/dist/util/http-retry.d.ts +3 -1
- package/dist/util/http-retry.js +26 -5
- package/dist/util/log.d.ts +3 -2
- package/dist/util/log.js +25 -9
- package/dist/util/request-scope.d.ts +2 -1
- package/dist/util/request-scope.js +2 -1
- package/dist/util/secret-detect.d.ts +5 -30
- package/dist/util/secret-detect.js +13 -39
- package/dist/util/stored-json.d.ts +1 -1
- package/dist/util/stored-json.js +1 -1
- package/dist/util/token-text.d.ts +1 -4
- package/dist/util/token-text.js +1 -4
- package/dist/util/transcript-tail.d.ts +2 -0
- package/dist/util/transcript-tail.js +24 -23
- package/dist/util/version.d.ts +5 -20
- package/dist/util/version.js +5 -20
- package/extensions/openclaw-plugin/index.ts +1 -1
- 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/connectors/github/cli-impl.d.ts +0 -25
- package/dist/sharing/shared.d.ts +0 -187
- package/dist/sharing/shared.js +0 -563
- package/dist/store/vector-writes.d.ts +0 -13
- package/dist/store/vector-writes.js +0 -89
- /package/dist/{cli → store}/quality-repair.d.ts +0 -0
package/dist/store/sessions.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { JsonObject } from './working-memory.js';
|
|
1
2
|
import { type TaskSnapshot, type SessionEvent } from './rows.js';
|
|
2
3
|
/** A shared-store caller's task state bucket: its owner and every name its project's rows carry. */
|
|
3
4
|
export interface ContinuityKey {
|
|
@@ -26,36 +27,11 @@ type SnapshotInput = {
|
|
|
26
27
|
};
|
|
27
28
|
export declare function saveActiveTaskSnapshot(hippoRoot: string, tenantId: string, snapshot: SnapshotInput, key?: ContinuityKey): TaskSnapshot;
|
|
28
29
|
export declare function loadActiveTaskSnapshot(hippoRoot: string, tenantId: string, key?: ContinuityKey): TaskSnapshot | null;
|
|
29
|
-
/**
|
|
30
|
-
*
|
|
31
|
-
* a Friday-evening orphan still offers continuity on Monday morning.
|
|
32
|
-
* Exported so callers can override via `loadFreshActiveTaskSnapshot`'s
|
|
33
|
-
* `opts.maxAgeMs`; deliberately no env knob (Simplicity First).
|
|
34
|
-
*/
|
|
30
|
+
/** Default freshness bound for AMBIENT active-task-snapshot reads: 72h rather than 48h so a Friday-evening orphan still offers continuity on Monday;
|
|
31
|
+
* override via `loadFreshActiveTaskSnapshot`'s `opts.maxAgeMs`; deliberately no env knob. */
|
|
35
32
|
export declare const SNAPSHOT_AMBIENT_MAX_AGE_MS: number;
|
|
36
|
-
/**
|
|
37
|
-
*
|
|
38
|
-
* hook context, MCP recall block), so snapshots expire. A
|
|
39
|
-
* snapshot written by `hippo pre-compact` has no death path tied to the
|
|
40
|
-
* session that owns it, so an orphaned row would otherwise inject into
|
|
41
|
-
* every prompt of every later session forever. Wraps `loadActiveTaskSnapshot`
|
|
42
|
-
* (unchanged, still the source of truth for explicit continuity surfaces),
|
|
43
|
-
* then applies, in order:
|
|
44
|
-
*
|
|
45
|
-
* 1. Owner match — ONLY when both `opts.sessionId` and the snapshot's
|
|
46
|
-
* `session_id` are non-null, non-empty strings and strictly equal
|
|
47
|
-
* (`===`). Owner reads are unbounded: the session that owns the snapshot
|
|
48
|
-
* can always see its own working state, regardless of age.
|
|
49
|
-
* 2. Age check — everything else, including absent-vs-absent ids. A
|
|
50
|
-
* null/undefined/empty id on EITHER side never counts as an owner match;
|
|
51
|
-
* it falls through here instead. (`runPreCompact` can legitimately save a
|
|
52
|
-
* snapshot with `session_id = null`; a null-equals-null "match" would
|
|
53
|
-
* reopen indefinite ambient injection for exactly those rows.) Returns
|
|
54
|
-
* the snapshot only when `age(updated_at) <= maxAgeMs` (default
|
|
55
|
-
* `SNAPSHOT_AMBIENT_MAX_AGE_MS`); otherwise null.
|
|
56
|
-
*
|
|
57
|
-
* No SQL change — age derives from the existing `updated_at` column.
|
|
58
|
-
*/
|
|
33
|
+
/** Bounded read for AMBIENT snapshot surfaces so orphaned snapshots expire. The owner (both session ids non-empty and `===`) always sees its own state;
|
|
34
|
+
* all others, null ids included (null === null is no match), get it only if age(updated_at) <= maxAgeMs (default `SNAPSHOT_AMBIENT_MAX_AGE_MS`), else null. */
|
|
59
35
|
export declare function loadFreshActiveTaskSnapshot(hippoRoot: string, tenantId: string, opts?: {
|
|
60
36
|
maxAgeMs?: number;
|
|
61
37
|
sessionId?: string | null;
|
|
@@ -66,15 +42,8 @@ export declare function freshActiveSnapshot(snapshot: TaskSnapshot | null, opts?
|
|
|
66
42
|
sessionId?: string | null;
|
|
67
43
|
}): TaskSnapshot | null;
|
|
68
44
|
export declare function clearActiveTaskSnapshot(hippoRoot: string, tenantId: string, clearedStatus?: string): boolean;
|
|
69
|
-
/**
|
|
70
|
-
*
|
|
71
|
-
* session-end death path.
|
|
72
|
-
* Only one `active` row exists per tenant (per owner and project when keyed) in practice (supersession happens
|
|
73
|
-
* at save), but the WHERE clause scopes on `session_id` too — not just
|
|
74
|
-
* `status='active' AND tenant_id=?` — so an ending session can never close a
|
|
75
|
-
* different, newer session's active snapshot. Returns the number of rows
|
|
76
|
-
* closed (0 when no active row is owned by `sessionId`).
|
|
77
|
-
*/
|
|
45
|
+
/** Close the `active` task snapshot(s) owned by `sessionId` at session end; the WHERE scopes on `session_id` too so an ending session can never close a
|
|
46
|
+
* newer session's snapshot. Returns the number of rows closed. */
|
|
78
47
|
export declare function closeTaskSnapshotsForSession(hippoRoot: string, tenantId: string, sessionId: string, status?: string, key?: ContinuityKey): number;
|
|
79
48
|
interface SessionEventInput {
|
|
80
49
|
session_id: string;
|
|
@@ -83,7 +52,7 @@ interface SessionEventInput {
|
|
|
83
52
|
task?: string | null;
|
|
84
53
|
source?: string;
|
|
85
54
|
scope?: string | null;
|
|
86
|
-
metadata?:
|
|
55
|
+
metadata?: JsonObject;
|
|
87
56
|
}
|
|
88
57
|
export declare function appendSessionEvent(hippoRoot: string, tenantId: string, event: SessionEventInput): SessionEvent;
|
|
89
58
|
export declare function listSessionEvents(hippoRoot: string, tenantId: string, options?: {
|
|
@@ -91,17 +60,11 @@ export declare function listSessionEvents(hippoRoot: string, tenantId: string, o
|
|
|
91
60
|
task?: string;
|
|
92
61
|
limit?: number;
|
|
93
62
|
}): SessionEvent[];
|
|
94
|
-
/**
|
|
95
|
-
* Return session_ids with a `session_complete` event newer than `sinceMs`.
|
|
96
|
-
* Used by the sleep auto-promotion pass to bound scanning to a fixed window.
|
|
97
|
-
*/
|
|
63
|
+
/** Session_ids with a `session_complete` event newer than `sinceMs`; bounds the sleep auto-promotion scan to a fixed window. */
|
|
98
64
|
export declare function findPromotableSessions(hippoRoot: string, tenantId: string, sinceMs: number): Array<{
|
|
99
65
|
session_id: string;
|
|
100
66
|
}>;
|
|
101
|
-
/**
|
|
102
|
-
* Idempotency guard — true if a trace-layer memory with this source_session_id
|
|
103
|
-
* already exists.
|
|
104
|
-
*/
|
|
67
|
+
/** Idempotency guard: true if a trace-layer memory with this source_session_id already exists. */
|
|
105
68
|
export declare function traceExistsForSession(hippoRoot: string, tenantId: string, session_id: string): boolean;
|
|
106
69
|
/** One caller's claim on a session id. */
|
|
107
70
|
export interface SessionOwnerBinding {
|
package/dist/store/sessions.js
CHANGED
|
@@ -73,8 +73,7 @@ export function saveActiveTaskSnapshot(hippoRoot, tenantId, snapshot, key) {
|
|
|
73
73
|
export function loadActiveTaskSnapshot(hippoRoot, tenantId, key) {
|
|
74
74
|
assertTenantId('loadActiveTaskSnapshot', tenantId);
|
|
75
75
|
const owned = key ? continuityWhere(key) : null;
|
|
76
|
-
|
|
77
|
-
try {
|
|
76
|
+
return onHandle(hippoRoot, (db) => {
|
|
78
77
|
// SAFETY: row's shape matches the ten columns named in the SELECT above.
|
|
79
78
|
const row = db.prepare(`
|
|
80
79
|
SELECT id, task, summary, next_step, status, source, session_id, scope, created_at, updated_at
|
|
@@ -92,47 +91,17 @@ export function loadActiveTaskSnapshot(hippoRoot, tenantId, key) {
|
|
|
92
91
|
if (!key)
|
|
93
92
|
writeActiveTaskMirror(hippoRoot, tenantId, loaded);
|
|
94
93
|
return loaded;
|
|
95
|
-
}
|
|
96
|
-
finally {
|
|
97
|
-
closeHippoDb(db);
|
|
98
|
-
}
|
|
94
|
+
}, openStore);
|
|
99
95
|
}
|
|
100
|
-
/**
|
|
101
|
-
*
|
|
102
|
-
* a Friday-evening orphan still offers continuity on Monday morning.
|
|
103
|
-
* Exported so callers can override via `loadFreshActiveTaskSnapshot`'s
|
|
104
|
-
* `opts.maxAgeMs`; deliberately no env knob (Simplicity First).
|
|
105
|
-
*/
|
|
96
|
+
/** Default freshness bound for AMBIENT active-task-snapshot reads: 72h rather than 48h so a Friday-evening orphan still offers continuity on Monday;
|
|
97
|
+
* override via `loadFreshActiveTaskSnapshot`'s `opts.maxAgeMs`; deliberately no env knob. */
|
|
106
98
|
export const SNAPSHOT_AMBIENT_MAX_AGE_MS = 72 * 60 * 60 * 1000;
|
|
107
|
-
/** A usable session id: non-null, non-empty string
|
|
108
|
-
* inline `typeof` check) so the owner-match rule in
|
|
109
|
-
* `loadFreshActiveTaskSnapshot` states its contract once. */
|
|
99
|
+
/** A usable session id: non-null, non-empty string; named so the owner-match rule in `loadFreshActiveTaskSnapshot` states its contract once. */
|
|
110
100
|
function isNonEmptySessionId(value) {
|
|
111
101
|
return typeof value === 'string' && value.length > 0;
|
|
112
102
|
}
|
|
113
|
-
/**
|
|
114
|
-
*
|
|
115
|
-
* hook context, MCP recall block), so snapshots expire. A
|
|
116
|
-
* snapshot written by `hippo pre-compact` has no death path tied to the
|
|
117
|
-
* session that owns it, so an orphaned row would otherwise inject into
|
|
118
|
-
* every prompt of every later session forever. Wraps `loadActiveTaskSnapshot`
|
|
119
|
-
* (unchanged, still the source of truth for explicit continuity surfaces),
|
|
120
|
-
* then applies, in order:
|
|
121
|
-
*
|
|
122
|
-
* 1. Owner match — ONLY when both `opts.sessionId` and the snapshot's
|
|
123
|
-
* `session_id` are non-null, non-empty strings and strictly equal
|
|
124
|
-
* (`===`). Owner reads are unbounded: the session that owns the snapshot
|
|
125
|
-
* can always see its own working state, regardless of age.
|
|
126
|
-
* 2. Age check — everything else, including absent-vs-absent ids. A
|
|
127
|
-
* null/undefined/empty id on EITHER side never counts as an owner match;
|
|
128
|
-
* it falls through here instead. (`runPreCompact` can legitimately save a
|
|
129
|
-
* snapshot with `session_id = null`; a null-equals-null "match" would
|
|
130
|
-
* reopen indefinite ambient injection for exactly those rows.) Returns
|
|
131
|
-
* the snapshot only when `age(updated_at) <= maxAgeMs` (default
|
|
132
|
-
* `SNAPSHOT_AMBIENT_MAX_AGE_MS`); otherwise null.
|
|
133
|
-
*
|
|
134
|
-
* No SQL change — age derives from the existing `updated_at` column.
|
|
135
|
-
*/
|
|
103
|
+
/** Bounded read for AMBIENT snapshot surfaces so orphaned snapshots expire. The owner (both session ids non-empty and `===`) always sees its own state;
|
|
104
|
+
* all others, null ids included (null === null is no match), get it only if age(updated_at) <= maxAgeMs (default `SNAPSHOT_AMBIENT_MAX_AGE_MS`), else null. */
|
|
136
105
|
export function loadFreshActiveTaskSnapshot(hippoRoot, tenantId, opts = {}, key) {
|
|
137
106
|
return freshActiveSnapshot(loadActiveTaskSnapshot(hippoRoot, tenantId, key), opts);
|
|
138
107
|
}
|
|
@@ -170,15 +139,8 @@ export function clearActiveTaskSnapshot(hippoRoot, tenantId, clearedStatus = 'cl
|
|
|
170
139
|
closeHippoDb(db);
|
|
171
140
|
}
|
|
172
141
|
}
|
|
173
|
-
/**
|
|
174
|
-
*
|
|
175
|
-
* session-end death path.
|
|
176
|
-
* Only one `active` row exists per tenant (per owner and project when keyed) in practice (supersession happens
|
|
177
|
-
* at save), but the WHERE clause scopes on `session_id` too — not just
|
|
178
|
-
* `status='active' AND tenant_id=?` — so an ending session can never close a
|
|
179
|
-
* different, newer session's active snapshot. Returns the number of rows
|
|
180
|
-
* closed (0 when no active row is owned by `sessionId`).
|
|
181
|
-
*/
|
|
142
|
+
/** Close the `active` task snapshot(s) owned by `sessionId` at session end; the WHERE scopes on `session_id` too so an ending session can never close a
|
|
143
|
+
* newer session's snapshot. Returns the number of rows closed. */
|
|
182
144
|
export function closeTaskSnapshotsForSession(hippoRoot, tenantId, sessionId, status = 'session-ended', key) {
|
|
183
145
|
assertTenantId('closeTaskSnapshotsForSession', tenantId);
|
|
184
146
|
if (key)
|
|
@@ -242,8 +204,7 @@ export function appendSessionEvent(hippoRoot, tenantId, event) {
|
|
|
242
204
|
}
|
|
243
205
|
export function listSessionEvents(hippoRoot, tenantId, options = {}) {
|
|
244
206
|
assertTenantId('listSessionEvents', tenantId);
|
|
245
|
-
|
|
246
|
-
try {
|
|
207
|
+
return onHandle(hippoRoot, (db) => {
|
|
247
208
|
const clauses = ['tenant_id = ?'];
|
|
248
209
|
const params = [tenantId];
|
|
249
210
|
if (options.session_id) {
|
|
@@ -267,19 +228,12 @@ export function listSessionEvents(hippoRoot, tenantId, options = {}) {
|
|
|
267
228
|
LIMIT ?
|
|
268
229
|
`).all(...params);
|
|
269
230
|
return rows.map(rowToSessionEvent).reverse();
|
|
270
|
-
}
|
|
271
|
-
finally {
|
|
272
|
-
closeHippoDb(db);
|
|
273
|
-
}
|
|
231
|
+
}, openStore);
|
|
274
232
|
}
|
|
275
|
-
/**
|
|
276
|
-
* Return session_ids with a `session_complete` event newer than `sinceMs`.
|
|
277
|
-
* Used by the sleep auto-promotion pass to bound scanning to a fixed window.
|
|
278
|
-
*/
|
|
233
|
+
/** Session_ids with a `session_complete` event newer than `sinceMs`; bounds the sleep auto-promotion scan to a fixed window. */
|
|
279
234
|
export function findPromotableSessions(hippoRoot, tenantId, sinceMs) {
|
|
280
235
|
assertTenantId('findPromotableSessions', tenantId);
|
|
281
|
-
|
|
282
|
-
try {
|
|
236
|
+
return onHandle(hippoRoot, (db) => {
|
|
283
237
|
// SAFETY: rows' shape matches the single `session_id` column selected
|
|
284
238
|
// above.
|
|
285
239
|
const rows = db.prepare(`
|
|
@@ -287,29 +241,19 @@ export function findPromotableSessions(hippoRoot, tenantId, sinceMs) {
|
|
|
287
241
|
WHERE event_type = 'session_complete' AND created_at >= ? AND tenant_id = ?
|
|
288
242
|
`).all(new Date(sinceMs).toISOString(), tenantId);
|
|
289
243
|
return rows;
|
|
290
|
-
}
|
|
291
|
-
finally {
|
|
292
|
-
closeHippoDb(db);
|
|
293
|
-
}
|
|
244
|
+
}, openStore);
|
|
294
245
|
}
|
|
295
|
-
/**
|
|
296
|
-
* Idempotency guard — true if a trace-layer memory with this source_session_id
|
|
297
|
-
* already exists.
|
|
298
|
-
*/
|
|
246
|
+
/** Idempotency guard: true if a trace-layer memory with this source_session_id already exists. */
|
|
299
247
|
export function traceExistsForSession(hippoRoot, tenantId, session_id) {
|
|
300
248
|
assertTenantId('traceExistsForSession', tenantId);
|
|
301
|
-
|
|
302
|
-
try {
|
|
249
|
+
return onHandle(hippoRoot, (db) => {
|
|
303
250
|
const row = db.prepare(`
|
|
304
251
|
SELECT 1 FROM memories
|
|
305
252
|
WHERE source_session_id = ? AND layer = 'trace' AND tenant_id = ?
|
|
306
253
|
LIMIT 1
|
|
307
254
|
`).get(session_id, tenantId);
|
|
308
255
|
return !!row;
|
|
309
|
-
}
|
|
310
|
-
finally {
|
|
311
|
-
closeHippoDb(db);
|
|
312
|
-
}
|
|
256
|
+
}, openStore);
|
|
313
257
|
}
|
|
314
258
|
/** The owner a session id is bound to, or null. */
|
|
315
259
|
function selectSessionOwnerAt(db, tenantId, sessionId) {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// hippo.db's half of the ConnectorEvents store group: each call on a handle of its own.
|
|
2
|
-
import { archiveDeletedArtifact, eventSeenAt, githubRouting,
|
|
2
|
+
import { archiveDeletedArtifact, eventSeenAt, githubRouting, insertGitHubDlq, logEvent, seenEvent } from '../connectors/github.js';
|
|
3
3
|
import { insertSlackDlq, markSlackEventSeen, rawMemoryIdForArtifactAt, slackEventRecord, slackEventSeenAt, slackTeamRoute } from '../connectors/slack.js';
|
|
4
4
|
import { onHandle } from '../open.js';
|
|
5
5
|
function eventRecord(hippoRoot, event) {
|
|
@@ -32,7 +32,7 @@ export function sqliteConnectorEvents(hippoRoot) {
|
|
|
32
32
|
archiveDeletedArtifact: (archive) => archiveArtifact(hippoRoot, archive),
|
|
33
33
|
slackTeamRoute: (teamId) => slackTeamRoute(hippoRoot, teamId),
|
|
34
34
|
githubRouting: (query) => githubRouting(hippoRoot, query),
|
|
35
|
-
parkDeadLetter: (letter) => (letter.connector === 'slack' ? insertSlackDlq(hippoRoot, letter) :
|
|
35
|
+
parkDeadLetter: (letter) => (letter.connector === 'slack' ? insertSlackDlq(hippoRoot, letter) : insertGitHubDlq(hippoRoot, letter)),
|
|
36
36
|
};
|
|
37
37
|
}
|
|
38
38
|
/** The group as a served store answers it: each call runs at once and resolves through a Promise, so a throw rejects as another store's would. */
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
import { ConflictError, NotFoundError } from '../../core/api-errors.js';
|
|
3
3
|
import { appendAuditEvent } from '../audit.js';
|
|
4
4
|
import { isSqliteBusy, withWriteScope } from '../../db/index.js';
|
|
5
|
-
import { errorMessage, log } from '../../util/log.js';
|
|
5
|
+
import { errorFields, errorMessage, log } from '../../util/log.js';
|
|
6
6
|
import { entryAfterOutcome } from '../../core/memory.js';
|
|
7
7
|
import { archiveRawMemory } from '../raw-archive.js';
|
|
8
8
|
import { ownScopeTouches } from '../recall-scope.js';
|
|
@@ -155,7 +155,7 @@ function cleanArchivedMirrors(db, hippoRoot, id) {
|
|
|
155
155
|
removeEntryMirrors(hippoRoot, id);
|
|
156
156
|
}
|
|
157
157
|
catch (mirrorErr) {
|
|
158
|
-
log.error(`archiveRaw: mirror cleanup failed for ${id} (will retry via reaper on next openHippoDb): ${errorMessage(mirrorErr)}
|
|
158
|
+
log.error(`archiveRaw: mirror cleanup failed for ${id} (will retry via reaper on next openHippoDb): ${errorMessage(mirrorErr)}`, errorFields(mirrorErr));
|
|
159
159
|
return;
|
|
160
160
|
}
|
|
161
161
|
try {
|
|
@@ -1,5 +1,7 @@
|
|
|
1
|
-
// A thrown error crosses the worker boundary as plain data and arrives as an instance
|
|
1
|
+
// A thrown error crosses the worker boundary as plain data and arrives as an instance
|
|
2
|
+
// of its class: the server's mappers test `instanceof`, `errcode` and fields.
|
|
2
3
|
import { BadRequestError, ConflictError, ForbiddenError, NotFoundError } from '../../core/api-errors.js';
|
|
4
|
+
import { RawAppendOnlyError } from '../../core/raw-append-only.js';
|
|
3
5
|
import { IncompatibleBinaryError, StoreBusyError } from '../../db/index.js';
|
|
4
6
|
import { BodyTimeoutError, BodyTooLargeError, HttpError } from '../../util/http-util.js';
|
|
5
7
|
import { errorMessage, log } from '../../util/log.js';
|
|
@@ -10,7 +12,7 @@ import { OtherStoreFolderError, SqliteBlockedError, StoreNotPortedError } from '
|
|
|
10
12
|
const CLASSES = [
|
|
11
13
|
Error, TypeError, RangeError, SyntaxError, ReferenceError, EvalError, URIError,
|
|
12
14
|
HttpError, BodyTooLargeError, BodyTimeoutError,
|
|
13
|
-
BadRequestError, ForbiddenError, NotFoundError, ConflictError, RejectedValueError, ScopeForbiddenError,
|
|
15
|
+
BadRequestError, ForbiddenError, NotFoundError, ConflictError, RejectedValueError, ScopeForbiddenError, RawAppendOnlyError,
|
|
14
16
|
SqliteBlockedError, StoreNotPortedError, OtherStoreFolderError,
|
|
15
17
|
StoreBusyError, IncompatibleBinaryError,
|
|
16
18
|
];
|
|
@@ -23,6 +23,7 @@ export interface SqliteExecutor {
|
|
|
23
23
|
/** Stops the writer thread as a crash would: its running and queued calls reject, and the next write starts a fresh thread. */
|
|
24
24
|
terminateWriter(): void;
|
|
25
25
|
}
|
|
26
|
-
/** Threads for the hippo.db under `hippoRoot`: one writer and two readers. The first
|
|
26
|
+
/** Threads for the hippo.db under `hippoRoot`: one writer and two readers. The first
|
|
27
|
+
* call starts the writer for the store's setup; a reader starts at its own first call. */
|
|
27
28
|
export declare function createSqliteExecutor(hippoRoot: string, opts?: ExecutorOptions): SqliteExecutor;
|
|
28
29
|
//# sourceMappingURL=executor.d.ts.map
|
|
@@ -279,7 +279,8 @@ class WorkerPool {
|
|
|
279
279
|
finish(pending, () => pending.fail(new StoreBusyError(WORKER_GONE, { cause })));
|
|
280
280
|
}
|
|
281
281
|
}
|
|
282
|
-
/** Threads for the hippo.db under `hippoRoot`: one writer and two readers. The first
|
|
282
|
+
/** Threads for the hippo.db under `hippoRoot`: one writer and two readers. The first
|
|
283
|
+
* call starts the writer for the store's setup; a reader starts at its own first call. */
|
|
283
284
|
export function createSqliteExecutor(hippoRoot, opts = {}) {
|
|
284
285
|
return new WorkerPool(hippoRoot, opts);
|
|
285
286
|
}
|
|
@@ -8,9 +8,9 @@ export interface SqliteLocal {
|
|
|
8
8
|
applyOutcome(outcome: OutcomeWrite, traceId: number): string[];
|
|
9
9
|
/** applyOutcome on the ids of the last recall, which hippo.db's meta table holds with that recall's trace; answers the ids applied. */
|
|
10
10
|
applyOutcomeToLastRecall(target: EntryTarget, good: boolean): string[];
|
|
11
|
-
/** finishRecall, then the ids this root lacks strengthened under `globalRoot`, then the ids and their trace saved as the last recall
|
|
12
|
-
* A store of another kind keeps no last recall, so its stand-in is its own finishRecall,
|
|
13
|
-
finishLastRecall(writes: LastRecallWrites, globalRoot: string | undefined):
|
|
11
|
+
/** finishRecall, then the ids this root lacks strengthened under `globalRoot`, then the ids and their trace saved as the last recall;
|
|
12
|
+
* answers the trace id. A store of another kind keeps no last recall, so its stand-in is its own finishRecall, answering null. */
|
|
13
|
+
finishLastRecall(writes: LastRecallWrites, globalRoot: string | undefined): number | null | Promise<number | null>;
|
|
14
14
|
}
|
|
15
15
|
export declare function sqliteLocal(hippoRoot: string): SqliteLocal;
|
|
16
16
|
/** What a served store answers for each write that needs hippo.db's own handle: a refusal. */
|
|
@@ -22,6 +22,7 @@ export function sqliteLocal(hippoRoot) {
|
|
|
22
22
|
strengthenRetrieved(globalRoot, ids.filter((id) => !strengthened.has(id)), opts);
|
|
23
23
|
// One write for both keys, so an outcome never pairs these ids with an older trace; a lost trace saves null.
|
|
24
24
|
saveIndex(hippoRoot, { last_retrieval_ids: [...ids], last_trace_id: traceId === null ? null : String(traceId) });
|
|
25
|
+
return traceId;
|
|
25
26
|
},
|
|
26
27
|
};
|
|
27
28
|
}
|
|
@@ -52,21 +52,24 @@ function rowToIncident(row) {
|
|
|
52
52
|
createdAt: row.created_at,
|
|
53
53
|
};
|
|
54
54
|
}
|
|
55
|
-
/** A malformed stored steps value reads back as no steps. */
|
|
56
|
-
function parseSteps(raw) {
|
|
55
|
+
/** A malformed stored steps value warns and reads back as no steps. */
|
|
56
|
+
function parseSteps(raw, id) {
|
|
57
|
+
const site = { table: 'processes', id, column: 'steps' };
|
|
57
58
|
try {
|
|
58
59
|
const parsed = JSON.parse(raw);
|
|
59
60
|
if (Array.isArray(parsed) && parsed.every(isJsonString)) {
|
|
60
61
|
return parsed;
|
|
61
62
|
}
|
|
63
|
+
warnDamagedColumn(site, 'wrong shape');
|
|
62
64
|
return [];
|
|
63
65
|
}
|
|
64
66
|
catch {
|
|
65
67
|
// Unreadable steps read back as none instead of failing the process read.
|
|
68
|
+
warnDamagedColumn(site, 'not valid JSON');
|
|
66
69
|
return [];
|
|
67
70
|
}
|
|
68
71
|
}
|
|
69
|
-
const rowToProcess = (row) => ({ ...head(row), processName: row.process_name, description: row.description, steps: parseSteps(row.steps), ...versionedTail(row) });
|
|
72
|
+
const rowToProcess = (row) => ({ ...head(row), processName: row.process_name, description: row.description, steps: parseSteps(row.steps, row.id), ...versionedTail(row) });
|
|
70
73
|
const rowToPolicy = (row) => ({ ...head(row), policyName: row.policy_name, policyText: row.policy_text, validFrom: row.valid_from, validTo: row.valid_to, ...versionedTail(row) });
|
|
71
74
|
const rowToSkill = (row) => ({ ...head(row), skillName: row.skill_name, instructions: row.instructions, trigger: row.trigger_text, ...versionedTail(row) });
|
|
72
75
|
const rowToProjectBrief = (row) => ({ ...head(row), repo: row.repo, summary: row.summary, ...versionedTail(row) });
|
|
@@ -100,7 +100,8 @@ function closeAt(hippoRoot, tenantId, kind, id, close) {
|
|
|
100
100
|
const closed = closeRow(db, tenantId, kind, id, close);
|
|
101
101
|
if (isObjectRefusal(closed) || !graphType)
|
|
102
102
|
return closed;
|
|
103
|
-
// Each graph write takes its own write lock, so both wait for the commit. The rows
|
|
103
|
+
// Each graph write takes its own write lock, so both wait for the commit. The rows
|
|
104
|
+
// go at once because the rebuild queue is keyed by a mirror memory that may be gone.
|
|
104
105
|
removeGraphEntitiesForObject(hippoRoot, tenantId, graphType, closed.id);
|
|
105
106
|
markGraphDirty(hippoRoot, tenantId, closed.memoryId);
|
|
106
107
|
return closed;
|
|
@@ -177,7 +178,8 @@ function writeObjectRow(db, tenantId, kind, memoryId, save) {
|
|
|
177
178
|
function refusalOf(written) {
|
|
178
179
|
return 'refused' in written;
|
|
179
180
|
}
|
|
180
|
-
/** Until the typed migration has run, a mirror goes in on the flat half-life that migration
|
|
181
|
+
/** Until the typed migration has run, a mirror goes in on the flat half-life that migration
|
|
182
|
+
* moves; the flag is read under the save's write lock, so the two cannot interleave. */
|
|
181
183
|
function onStoreHalfLife(db, mirror) {
|
|
182
184
|
if (getMeta(db, TYPED_HALF_LIFE_META_KEY, '') !== '')
|
|
183
185
|
return mirror;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// hippo.db's half of the Quarantine store group: each method is one call on its own handle.
|
|
2
|
-
import { errorMessage, log } from '../../util/log.js';
|
|
2
|
+
import { errorFields, errorMessage, log } from '../../util/log.js';
|
|
3
3
|
import { readEntry } from '../entry-reads.js';
|
|
4
4
|
import { writeEntryMirrors } from '../entry-writes.js';
|
|
5
5
|
import { onHandle } from '../open.js';
|
|
@@ -12,7 +12,7 @@ function rewriteMirror(hippoRoot, tenantId, id) {
|
|
|
12
12
|
writeEntryMirrors(hippoRoot, restored);
|
|
13
13
|
}
|
|
14
14
|
catch (err) {
|
|
15
|
-
log.error(`quarantine: mirror rewrite failed for ${id}: ${errorMessage(err)}
|
|
15
|
+
log.error(`quarantine: mirror rewrite failed for ${id}: ${errorMessage(err)}`, errorFields(err));
|
|
16
16
|
}
|
|
17
17
|
}
|
|
18
18
|
export function sqliteQuarantine(hippoRoot) {
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
import { type ContinuityKey } from '../sessions.js';
|
|
1
|
+
import type { HippoStore, RecallWrites, StoreGroups, Sync } from '../port.js';
|
|
3
2
|
/** The store a request runs on: the served one, else hippo.db under its root, as the CLI and SDK callers have it. */
|
|
4
3
|
export declare function storeFor(ctx: {
|
|
5
4
|
readonly hippoRoot: string;
|
|
@@ -13,8 +12,6 @@ export type SqliteSyncStore = Sync<Omit<HippoStore, AsyncOnly>>;
|
|
|
13
12
|
export declare function sqliteSyncStore(hippoRoot: string): SqliteSyncStore & Sync<Omit<StoreGroups, AsyncOnly>>;
|
|
14
13
|
/** `sqliteSyncStore` as a served store: each method runs at once and answers through a Promise, so a throw rejects as another store's would. */
|
|
15
14
|
export declare function sqliteStore(hippoRoot: string): HippoStore & StoreGroups;
|
|
16
|
-
/** sqliteStore's continuity read, for the synchronous recall that cannot await the port. */
|
|
17
|
-
export declare function continuityAt(hippoRoot: string, tenantId: string, eventLimit: number, key: ContinuityKey | null): ContinuityBlock;
|
|
18
15
|
/** What a finished recall wrote after its audit rows: the trace's id, null when none was asked or its write failed, and the ids strengthened. */
|
|
19
16
|
interface RecallFinish {
|
|
20
17
|
readonly traceId: number | null;
|
|
@@ -4,7 +4,6 @@ import { listApiKeyRows, readApiKeyRecord } from '../auth.js';
|
|
|
4
4
|
import { existsSync } from 'node:fs';
|
|
5
5
|
import { appendAuditEvent, listAuditEventsAfter, queryAuditEvents } from '../audit.js';
|
|
6
6
|
import { getHippoDbPath, withWriteScope } from '../../db/index.js';
|
|
7
|
-
import { loadStoredVectorViews } from '../embeddings/index.js';
|
|
8
7
|
import { activeGoalsWithPolicies, localGoalRecallRows, writeGoalRecallLog } from '../goals.js';
|
|
9
8
|
import { planningFallacyEvidenceAt } from '../planning-fallacy-evidence.js';
|
|
10
9
|
import { writeRecallTrace } from '../recall-trace.js';
|
|
@@ -28,7 +27,7 @@ import { createKeyAt, createSelfKeyAt } from '../key-writes.js';
|
|
|
28
27
|
import { onHandle } from '../open.js';
|
|
29
28
|
import { loadRecallSearchEntries } from '../search-rows.js';
|
|
30
29
|
import { listSessionEvents, loadActiveTaskSnapshot } from '../sessions.js';
|
|
31
|
-
import { entriesWithoutVectorAt, writeVectorsAt } from '../vector-
|
|
30
|
+
import { entriesWithoutVectorAt, loadStoredVectorViews, writeVectorsAt } from '../vector-index.js';
|
|
32
31
|
/** The store a request runs on: the served one, else hippo.db under its root, as the CLI and SDK callers have it. */
|
|
33
32
|
export function storeFor(ctx) {
|
|
34
33
|
return ctx.store ?? sqliteStore(ctx.hippoRoot);
|
|
@@ -266,7 +265,7 @@ function sqliteKeyAudit(hippoRoot) {
|
|
|
266
265
|
};
|
|
267
266
|
}
|
|
268
267
|
/** sqliteStore's continuity read, for the synchronous recall that cannot await the port. */
|
|
269
|
-
|
|
268
|
+
function continuityAt(hippoRoot, tenantId, eventLimit, key) {
|
|
270
269
|
const activeSnapshot = loadActiveTaskSnapshot(hippoRoot, tenantId, key ?? undefined);
|
|
271
270
|
const sessionId = activeSnapshot?.session_id ?? undefined;
|
|
272
271
|
return {
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
// hippo.db's vector reads. Async only: the nearest-row scan yields between chunks, so a store worker awaits these where it runs every other method to its end.
|
|
2
2
|
import { loadPhysicsState } from '../../db/physics-state.js';
|
|
3
|
-
import { embeddingIndexStateAt, loadStoredVectors } from '../embeddings/index.js';
|
|
4
3
|
import { onHandle } from '../open.js';
|
|
5
4
|
import { loadVectorCandidateEntries } from '../search-rows.js';
|
|
5
|
+
import { loadStoredVectors, storedIndexState } from '../vector-index.js';
|
|
6
6
|
export function sqliteVectorReads(hippoRoot) {
|
|
7
7
|
return {
|
|
8
8
|
async embeddingIndexState() {
|
|
9
|
-
return
|
|
9
|
+
return storedIndexState(hippoRoot);
|
|
10
10
|
},
|
|
11
11
|
async storedVectors(ids) {
|
|
12
12
|
return loadStoredVectors(hippoRoot, ids);
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { auditWriteFailureCount } from '../audit.js';
|
|
2
2
|
import { RequestStores } from '../../db/index.js';
|
|
3
|
-
import { loadStoredVectorViews } from '../
|
|
3
|
+
import { loadStoredVectorViews } from '../vector-index.js';
|
|
4
4
|
import { requestScopes } from '../../util/request-scope.js';
|
|
5
5
|
import { initStore } from '../open.js';
|
|
6
6
|
import { watchCommits } from './commit-watch.js';
|
|
@@ -7,8 +7,8 @@ export type OpPlace = OpMode | 'server';
|
|
|
7
7
|
export type OpPlaces<G> = {
|
|
8
8
|
readonly [M in keyof G]: OpPlace;
|
|
9
9
|
};
|
|
10
|
-
/**
|
|
11
|
-
*
|
|
10
|
+
/** Store methods answered by a worker, base ones under `base`. Tagged by effect, not name: predictionBaserate (audit row) and bumpRecallStats
|
|
11
|
+
* (stats.json) are writes. A read that opens through `openStore` is a read: the writer runs that open's setup before any reader serves. */
|
|
12
12
|
export declare const WORKER_OPS: {
|
|
13
13
|
readonly base: {
|
|
14
14
|
readonly findApiKey: "read";
|
|
@@ -82,6 +82,17 @@ export declare const WORKER_OPS: {
|
|
|
82
82
|
readonly graphReads: {
|
|
83
83
|
readonly graphRows: "read";
|
|
84
84
|
};
|
|
85
|
+
readonly objects: {
|
|
86
|
+
readonly listObjects: "read";
|
|
87
|
+
readonly objectById: "read";
|
|
88
|
+
readonly closeObject: "write";
|
|
89
|
+
readonly saveObject: "write";
|
|
90
|
+
readonly openIncident: "write";
|
|
91
|
+
readonly resolveIncident: "write";
|
|
92
|
+
readonly policiesInForce: "read";
|
|
93
|
+
readonly activeSkillsByName: "read";
|
|
94
|
+
readonly briefReceipts: "read";
|
|
95
|
+
};
|
|
85
96
|
readonly readiness: {
|
|
86
97
|
readonly ping: "read";
|
|
87
98
|
};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
/**
|
|
2
|
-
*
|
|
1
|
+
/** Store methods answered by a worker, base ones under `base`. Tagged by effect, not name: predictionBaserate (audit row) and bumpRecallStats
|
|
2
|
+
* (stats.json) are writes. A read that opens through `openStore` is a read: the writer runs that open's setup before any reader serves. */
|
|
3
3
|
export const WORKER_OPS = {
|
|
4
4
|
base: {
|
|
5
5
|
findApiKey: 'read',
|
|
@@ -73,6 +73,17 @@ export const WORKER_OPS = {
|
|
|
73
73
|
graphReads: {
|
|
74
74
|
graphRows: 'read',
|
|
75
75
|
},
|
|
76
|
+
objects: {
|
|
77
|
+
listObjects: 'read',
|
|
78
|
+
objectById: 'read',
|
|
79
|
+
closeObject: 'write',
|
|
80
|
+
saveObject: 'write',
|
|
81
|
+
openIncident: 'write',
|
|
82
|
+
resolveIncident: 'write',
|
|
83
|
+
policiesInForce: 'read',
|
|
84
|
+
activeSkillsByName: 'read',
|
|
85
|
+
briefReceipts: 'read',
|
|
86
|
+
},
|
|
76
87
|
readiness: {
|
|
77
88
|
ping: 'read',
|
|
78
89
|
},
|
|
@@ -35,7 +35,9 @@ function vectorGroups(executor, inProcess) {
|
|
|
35
35
|
storedVectors: async (ids) => (ids.length === 0 ? new Map() : vectorCopiesOf(await pack('vectors.storedVectors', ids, vectors.storedVectors))),
|
|
36
36
|
},
|
|
37
37
|
vectorViews: {
|
|
38
|
-
storedVectorViews: async (ids) => (ids.length === 0
|
|
38
|
+
storedVectorViews: async (ids) => (ids.length === 0
|
|
39
|
+
? new Map()
|
|
40
|
+
: vectorViewsOf(await pack('vectorViews.storedVectorViews', ids, vectorViews.storedVectorViews))),
|
|
39
41
|
},
|
|
40
42
|
};
|
|
41
43
|
}
|
|
@@ -52,7 +54,7 @@ function probing(hippoRoot, served) {
|
|
|
52
54
|
* `executor` defaults to threads of the store's own, with the server's lock wait. */
|
|
53
55
|
export function workerSqliteStore(hippoRoot, executor = createSqliteExecutor(hippoRoot)) {
|
|
54
56
|
const inProcess = sqliteStore(hippoRoot);
|
|
55
|
-
const { keyAudit, keyWrites, vectorWrites, entryWrites, contextReads, predictions, dagReads, auditLog, quarantine, graphReads } = WORKER_OPS;
|
|
57
|
+
const { keyAudit, keyWrites, vectorWrites, entryWrites, contextReads, predictions, dagReads, auditLog, quarantine, graphReads, objects } = WORKER_OPS;
|
|
56
58
|
const store = {
|
|
57
59
|
...inProcess,
|
|
58
60
|
...onWorkers(executor, 'base', WORKER_OPS.base, inProcess),
|
|
@@ -67,6 +69,7 @@ export function workerSqliteStore(hippoRoot, executor = createSqliteExecutor(hip
|
|
|
67
69
|
auditLog: onWorkers(executor, 'auditLog', auditLog, inProcess.auditLog),
|
|
68
70
|
quarantine: onWorkers(executor, 'quarantine', quarantine, inProcess.quarantine),
|
|
69
71
|
graphReads: onWorkers(executor, 'graphReads', graphReads, inProcess.graphReads),
|
|
72
|
+
objects: onWorkers(executor, 'objects', objects, inProcess.objects),
|
|
70
73
|
readiness: probing(hippoRoot, onWorkers(executor, 'readiness', WORKER_OPS.readiness, inProcess.readiness)),
|
|
71
74
|
close: () => executor.close(),
|
|
72
75
|
};
|