hippo-memory 1.69.0 → 1.70.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 +5 -2
- package/dist/agent-memories/apply.d.ts +3 -3
- package/dist/agent-memories/apply.js +16 -31
- package/dist/agent-memories/claude-code.d.ts +1 -3
- package/dist/agent-memories/claude-code.js +11 -7
- package/dist/agent-memories/copilot.js +3 -2
- package/dist/agent-memories/files.js +3 -2
- package/dist/agent-memories/gemini.js +6 -5
- package/dist/agent-memories/keys.js +3 -2
- package/dist/agent-memories/legacy.d.ts +2 -2
- package/dist/agent-memories/legacy.js +2 -2
- package/dist/agent-memories/report.d.ts +1 -1
- package/dist/agent-memories/report.js +1 -1
- package/dist/agent-memories/source.d.ts +1 -1
- package/dist/agent-memories/source.js +6 -5
- package/dist/agent-memories/sync.d.ts +1 -1
- package/dist/agent-memories/sync.js +24 -33
- package/dist/agent-memories/types.d.ts +1 -1
- package/dist/api/assemble.d.ts +2 -2
- package/dist/api/assemble.js +42 -32
- package/dist/api/audit.d.ts +4 -7
- package/dist/api/audit.js +6 -20
- package/dist/api/auth.d.ts +5 -18
- package/dist/api/auth.js +44 -194
- package/dist/api/auto-sleep.d.ts +13 -0
- package/dist/api/auto-sleep.js +32 -0
- package/dist/{availability.d.ts → api/availability.d.ts} +2 -2
- package/dist/{availability.js → api/availability.js} +12 -29
- package/dist/{context-auto.js → api/context-auto.js} +2 -1
- package/dist/{context-render.d.ts → api/context-render.d.ts} +4 -4
- package/dist/{context-render.js → api/context-render.js} +7 -6
- package/dist/api/context-select.d.ts +5 -5
- package/dist/api/context-select.js +37 -45
- package/dist/api/context-types.d.ts +5 -5
- package/dist/api/context.d.ts +2 -4
- package/dist/api/context.js +48 -61
- package/dist/api/dormant.d.ts +3 -3
- package/dist/api/dormant.js +38 -107
- package/dist/api/drill-down.d.ts +2 -2
- package/dist/api/drill-down.js +37 -65
- package/dist/api/forget.d.ts +2 -11
- package/dist/api/forget.js +13 -46
- package/dist/api/goals.d.ts +1 -1
- package/dist/api/goals.js +2 -2
- package/dist/api/index.d.ts +26 -0
- package/dist/api/index.js +29 -0
- package/dist/api/instruction-detect.js +74 -0
- package/dist/api/learn.js +63 -55
- package/dist/api/ledger-db.d.ts +20 -0
- package/dist/api/ledger-db.js +79 -0
- package/dist/api/on-store.d.ts +16 -0
- package/dist/api/on-store.js +36 -0
- package/dist/api/outcome.d.ts +5 -42
- package/dist/api/outcome.js +15 -80
- package/dist/{pilot-arm.d.ts → api/pilot-arm.d.ts} +1 -1
- package/dist/{pilot-arm.js → api/pilot-arm.js} +15 -23
- package/dist/api/promote.d.ts +4 -15
- package/dist/api/promote.js +29 -106
- package/dist/{prompt-hook.d.ts → api/prompt-hook.d.ts} +7 -7
- package/dist/{prompt-hook.js → api/prompt-hook.js} +34 -53
- package/dist/api/quarantine.d.ts +5 -5
- package/dist/api/quarantine.js +30 -106
- package/dist/api/recall-core.d.ts +4 -0
- package/dist/api/recall-core.js +112 -0
- package/dist/{recall-history.js → api/recall-history.js} +30 -25
- package/dist/{recall-pipeline.d.ts → api/recall-pipeline.d.ts} +5 -5
- package/dist/{recall-pipeline.js → api/recall-pipeline.js} +47 -42
- package/dist/api/recall-record.d.ts +10 -13
- package/dist/api/recall-record.js +10 -30
- package/dist/api/recall-request.d.ts +2 -2
- package/dist/api/recall-request.js +3 -3
- package/dist/api/recall-types.d.ts +41 -16
- package/dist/api/recall.d.ts +1 -1
- package/dist/api/recall.js +39 -37
- package/dist/api/remember.d.ts +10 -12
- package/dist/api/remember.js +29 -45
- package/dist/api/session-owners.d.ts +4 -0
- package/dist/api/session-owners.js +17 -0
- package/dist/api/sleep-run.d.ts +7 -7
- package/dist/api/sleep-run.js +63 -75
- package/dist/api/sleep.d.ts +1 -1
- package/dist/api/tokens.d.ts +2 -2
- package/dist/api/tokens.js +9 -21
- package/dist/api/types.d.ts +2 -2
- package/dist/api/types.js +1 -1
- package/dist/capture/caller-session.d.ts +2 -2
- package/dist/capture/caller-session.js +8 -8
- package/dist/{capture-error.d.ts → capture/capture-error.d.ts} +2 -2
- package/dist/{capture-error.js → capture/capture-error.js} +7 -7
- package/dist/{codex-patch.js → capture/codex-patch.js} +1 -1
- package/dist/capture/command.d.ts +1 -1
- package/dist/capture/command.js +54 -41
- package/dist/capture/compact-resume-caller.d.ts +1 -1
- package/dist/capture/compact-resume-caller.js +7 -7
- package/dist/capture/compact.d.ts +4 -1
- package/dist/capture/compact.js +40 -22
- package/dist/capture/compaction-items-caller.d.ts +1 -1
- package/dist/capture/compaction-items-caller.js +7 -5
- package/dist/{compaction-items.js → capture/compaction-items.js} +27 -3
- package/dist/{compaction-record.d.ts → capture/compaction-record.d.ts} +10 -6
- package/dist/{compaction-record.js → capture/compaction-record.js} +48 -94
- package/dist/{compaction-spool.js → capture/compaction-spool.js} +17 -13
- package/dist/capture/copilot-transcript.js +1 -1
- package/dist/capture/extract.js +2 -2
- package/dist/capture/failure-caller.d.ts +2 -2
- package/dist/capture/failure-caller.js +6 -6
- package/dist/capture/failure-reading.d.ts +2 -5
- package/dist/capture/failure-reading.js +11 -12
- package/dist/{handoff-evidence.d.ts → capture/handoff-evidence.d.ts} +1 -1
- package/dist/{handoff-evidence.js → capture/handoff-evidence.js} +2 -1
- package/dist/capture/pre-compact-caller.d.ts +1 -1
- package/dist/capture/pre-compact-caller.js +2 -2
- package/dist/{session-digest.d.ts → capture/session-digest.d.ts} +1 -5
- package/dist/{session-digest.js → capture/session-digest.js} +17 -23
- package/dist/capture/session-end-caller.d.ts +2 -2
- package/dist/capture/session-end-caller.js +1 -1
- package/dist/capture/session-texts.d.ts +1 -1
- package/dist/capture/session-texts.js +5 -5
- package/dist/capture/session-worker.js +6 -4
- package/dist/{share-scrub.js → capture/share-scrub.js} +2 -2
- package/dist/capture/transcript.js +68 -74
- package/dist/capture/working-state.d.ts +0 -3
- package/dist/capture/working-state.js +7 -7
- package/dist/{audit-prune.d.ts → cli/audit-prune.d.ts} +1 -2
- package/dist/{audit-prune.js → cli/audit-prune.js} +5 -39
- package/dist/cli/audit.d.ts +2 -2
- package/dist/cli/audit.js +77 -72
- package/dist/cli/auth.d.ts +2 -1
- package/dist/cli/auth.js +18 -20
- package/dist/cli/briefs.d.ts +4 -3
- package/dist/cli/briefs.js +59 -181
- package/dist/cli/card.d.ts +2 -1
- package/dist/cli/card.js +25 -23
- package/dist/{client.d.ts → cli/client.d.ts} +1 -1
- package/dist/{client.js → cli/client.js} +1 -1
- package/dist/cli/compact-resume-payload.d.ts +8 -0
- package/dist/cli/compact-resume-payload.js +39 -0
- package/dist/cli/context.d.ts +2 -13
- package/dist/cli/context.js +41 -71
- package/dist/cli/continuity.d.ts +6 -5
- package/dist/cli/continuity.js +109 -99
- package/dist/{correction-latency.d.ts → cli/correction-latency.d.ts} +1 -1
- package/dist/cli/curate.d.ts +9 -9
- package/dist/cli/curate.js +177 -149
- package/dist/cli/dag.d.ts +4 -4
- package/dist/cli/dag.js +46 -34
- package/dist/cli/decisions.d.ts +4 -3
- package/dist/cli/decisions.js +108 -218
- package/dist/cli/eval.d.ts +1 -3
- package/dist/cli/eval.js +43 -31
- package/dist/cli/explain.d.ts +1 -1
- package/dist/cli/explain.js +35 -19
- package/dist/cli/flag-values.d.ts +25 -0
- package/dist/cli/flag-values.js +103 -0
- package/dist/cli/flags.d.ts +303 -0
- package/dist/cli/flags.js +169 -0
- package/dist/cli/goals.d.ts +2 -1
- package/dist/cli/goals.js +39 -34
- package/dist/cli/hook-runtime.d.ts +49 -0
- package/dist/cli/hook-runtime.js +155 -0
- package/dist/cli/init.d.ts +2 -1
- package/dist/cli/init.js +151 -118
- package/dist/cli/install-steps.d.ts +7 -0
- package/dist/cli/install-steps.js +110 -0
- package/dist/cli/last-sleep.d.ts +2 -1
- package/dist/cli/last-sleep.js +9 -7
- package/dist/cli/maintenance.d.ts +5 -4
- package/dist/cli/maintenance.js +31 -27
- package/dist/cli/object-verbs.d.ts +40 -0
- package/dist/cli/object-verbs.js +65 -0
- package/dist/{owner-validation.d.ts → cli/owner-validation.d.ts} +0 -1
- package/dist/{owner-validation.js → cli/owner-validation.js} +2 -2
- package/dist/cli/playbooks.d.ts +4 -3
- package/dist/cli/playbooks.js +77 -280
- package/dist/cli/print.d.ts +18 -0
- package/dist/cli/print.js +85 -0
- package/dist/cli/projects.d.ts +2 -3
- package/dist/cli/projects.js +56 -49
- package/dist/{provenance-coverage.d.ts → cli/provenance-coverage.d.ts} +1 -1
- package/dist/cli/quality-repair-once.js +4 -4
- package/dist/{quality-repair.js → cli/quality-repair.js} +23 -37
- package/dist/cli/recall.d.ts +2 -4
- package/dist/cli/recall.js +101 -150
- package/dist/{refine-llm.d.ts → cli/refine-llm.d.ts} +1 -1
- package/dist/{refine-llm.js → cli/refine-llm.js} +70 -82
- package/dist/cli/remember.d.ts +1 -3
- package/dist/cli/remember.js +124 -103
- package/dist/{scheduler.d.ts → cli/scheduler.d.ts} +3 -1
- package/dist/{scheduler.js → cli/scheduler.js} +13 -7
- package/dist/cli/serve.d.ts +1 -1
- package/dist/cli/serve.js +34 -4
- package/dist/cli/session-hooks.d.ts +4 -4
- package/dist/cli/session-hooks.js +190 -184
- package/dist/cli/setup.d.ts +2 -1
- package/dist/cli/setup.js +41 -21
- package/dist/cli/shared.d.ts +5 -95
- package/dist/cli/shared.js +18 -369
- package/dist/cli/slack.d.ts +2 -1
- package/dist/cli/slack.js +31 -55
- package/dist/cli/sleep-render.d.ts +4 -0
- package/dist/cli/sleep-render.js +61 -0
- package/dist/cli/sleep.d.ts +2 -8
- package/dist/cli/sleep.js +20 -76
- package/dist/cli/status.d.ts +3 -3
- package/dist/cli/status.js +39 -41
- package/dist/{stdin.js → cli/stdin.js} +6 -6
- package/dist/cli/transfer.d.ts +4 -4
- package/dist/cli/transfer.js +68 -42
- package/dist/cli/usage.js +4 -2
- package/dist/cli.d.ts +289 -5
- package/dist/cli.js +184 -117
- package/dist/connectors/dlq.d.ts +44 -0
- package/dist/connectors/dlq.js +30 -0
- package/dist/connectors/github/backfill.d.ts +1 -1
- package/dist/connectors/github/backfill.js +29 -66
- package/dist/connectors/github/cli-impl.js +59 -74
- package/dist/connectors/github/deletion.d.ts +5 -6
- package/dist/connectors/github/deletion.js +18 -52
- package/dist/connectors/github/dlq.d.ts +7 -61
- package/dist/connectors/github/dlq.js +19 -119
- package/dist/connectors/github/ingest.d.ts +2 -31
- package/dist/connectors/github/ingest.js +20 -83
- package/dist/connectors/github/octokit-client.d.ts +1 -1
- package/dist/connectors/github/octokit-client.js +2 -1
- package/dist/connectors/github/tenant-routing.d.ts +2 -2
- package/dist/connectors/github/tenant-routing.js +10 -36
- package/dist/connectors/github/transform.d.ts +1 -1
- package/dist/connectors/github/types.d.ts +1 -1
- package/dist/connectors/github/types.js +15 -18
- package/dist/connectors/github/webhook.d.ts +3 -2
- package/dist/connectors/github/webhook.js +84 -87
- package/dist/connectors/slack/backfill.d.ts +1 -1
- package/dist/connectors/slack/backfill.js +5 -29
- package/dist/connectors/slack/deletion.d.ts +4 -7
- package/dist/connectors/slack/deletion.js +20 -49
- package/dist/connectors/slack/dlq.d.ts +7 -49
- package/dist/connectors/slack/dlq.js +25 -118
- package/dist/connectors/slack/ingest.d.ts +5 -18
- package/dist/connectors/slack/ingest.js +27 -91
- package/dist/connectors/slack/signature.js +2 -1
- package/dist/connectors/slack/tenant-routing.d.ts +4 -1
- package/dist/connectors/slack/tenant-routing.js +13 -14
- package/dist/connectors/slack/transform.d.ts +1 -1
- package/dist/connectors/slack/types.d.ts +1 -1
- package/dist/connectors/slack/types.js +3 -12
- package/dist/connectors/slack/web-client.js +2 -2
- package/dist/connectors/slack/webhook.d.ts +3 -2
- package/dist/connectors/slack/webhook.js +75 -82
- package/dist/connectors/slack/workspaces.d.ts +4 -17
- package/dist/connectors/slack/workspaces.js +4 -34
- package/dist/consolidate/conflicts.d.ts +1 -1
- package/dist/consolidate/conflicts.js +4 -4
- package/dist/{dag.d.ts → consolidate/dag.d.ts} +1 -1
- package/dist/{dag.js → consolidate/dag.js} +60 -81
- package/dist/consolidate/decay.d.ts +2 -2
- package/dist/consolidate/decay.js +28 -22
- package/dist/{dedupe.js → consolidate/dedupe.js} +11 -19
- package/dist/consolidate/flush-units.d.ts +2 -2
- package/dist/{half-life-migration.d.ts → consolidate/half-life-migration.d.ts} +3 -9
- package/dist/consolidate/half-life-migration.js +106 -0
- package/dist/consolidate/llm-passes.js +8 -8
- package/dist/{memory-value.d.ts → consolidate/memory-value.d.ts} +7 -2
- package/dist/{memory-value.js → consolidate/memory-value.js} +9 -7
- package/dist/consolidate/merge.js +57 -54
- package/dist/{merged-row.d.ts → consolidate/merged-row.d.ts} +1 -1
- package/dist/{merged-row.js → consolidate/merged-row.js} +2 -2
- package/dist/consolidate/physics-pass.js +46 -46
- package/dist/{replay.d.ts → consolidate/replay.d.ts} +1 -1
- package/dist/{replay.js → consolidate/replay.js} +2 -2
- package/dist/consolidate/run.d.ts +7 -13
- package/dist/consolidate/run.js +6 -37
- package/dist/consolidate/sleep.d.ts +1 -1
- package/dist/consolidate/sleep.js +64 -134
- package/dist/{trace.js → consolidate/trace.js} +4 -6
- package/dist/consolidate/traces.js +34 -29
- package/dist/{ablation.js → core/ablation.js} +1 -1
- package/dist/{agent-memories/tools.d.ts → core/agent-memory-tools.d.ts} +1 -1
- package/dist/{agent-memories/tools.js → core/agent-memory-tools.js} +1 -1
- package/dist/{ambient.js → core/ambient.js} +12 -10
- package/dist/{capture-contract.d.ts → core/capture-contract.d.ts} +13 -2
- package/dist/{capture-contract.js → core/capture-contract.js} +64 -0
- package/dist/{compare.d.ts → core/compare.d.ts} +2 -0
- package/dist/{compare.js → core/compare.js} +10 -3
- package/dist/{config.d.ts → core/config.d.ts} +6 -6
- package/dist/{config.js → core/config.js} +99 -72
- package/dist/core/handoff.js +87 -0
- package/dist/{memory-quality.js → core/memory-quality.js} +1 -1
- package/dist/{memory.d.ts → core/memory.d.ts} +17 -5
- package/dist/{memory.js → core/memory.js} +110 -82
- package/dist/{physics.d.ts → core/physics.d.ts} +1 -1
- package/dist/{physics.js → core/physics.js} +2 -1
- package/dist/{project-identity.d.ts → core/project-identity.d.ts} +0 -5
- package/dist/{project-identity.js → core/project-identity.js} +5 -17
- package/dist/{project-remote.js → core/project-remote.js} +4 -4
- package/dist/{prompt-recall.js → core/prompt-recall.js} +1 -1
- package/dist/{salience.js → core/salience.js} +35 -20
- package/dist/{search/types.d.ts → core/search-types.d.ts} +2 -2
- package/dist/{search/types.js → core/search-types.js} +1 -1
- package/dist/core/session-digest-row.d.ts +5 -0
- package/dist/core/session-digest-row.js +6 -0
- package/dist/{dashboard-actions.d.ts → dashboard/dashboard-actions.d.ts} +1 -1
- package/dist/{dashboard-actions.js → dashboard/dashboard-actions.js} +5 -5
- package/dist/{dashboard-queries.d.ts → dashboard/dashboard-queries.d.ts} +7 -2
- package/dist/{dashboard-queries.js → dashboard/dashboard-queries.js} +6 -10
- package/dist/{dashboard-snapshot.d.ts → dashboard/dashboard-snapshot.d.ts} +9 -9
- package/dist/{dashboard-snapshot.js → dashboard/dashboard-snapshot.js} +101 -104
- package/dist/{dashboard.js → dashboard/dashboard.js} +124 -53
- package/dist/db/backup.js +1 -1
- package/dist/db/busy.d.ts +18 -1
- package/dist/db/busy.js +74 -9
- package/dist/db/connect.d.ts +10 -2
- package/dist/db/connect.js +43 -10
- package/dist/db/index.d.ts +9 -0
- package/dist/db/index.js +8 -0
- package/dist/db/meta.d.ts +4 -0
- package/dist/db/meta.js +11 -1
- package/dist/db/migrate.d.ts +8 -1
- package/dist/db/migrate.js +25 -30
- package/dist/db/migrations/v08.js +1 -1
- package/dist/db/migrations/v14.js +39 -35
- package/dist/db/migrations/v16.js +29 -26
- package/dist/db/migrations/v18.js +6 -5
- package/dist/db/migrations/v20.js +4 -2
- package/dist/db/migrations/v22.js +39 -36
- package/dist/db/migrations/v24.js +27 -22
- package/dist/db/migrations/v29.js +37 -32
- package/dist/db/migrations/v31.js +36 -31
- package/dist/db/migrations/v35.js +1 -1
- package/dist/db/migrations/v39.js +1 -1
- package/dist/db/migrations/v40.js +15 -14
- package/dist/db/migrations/v43.js +7 -6
- package/dist/db/migrations/v44.js +1 -1
- package/dist/db/migrations/v45.js +1 -1
- package/dist/db/migrations/v46.js +1 -1
- package/dist/db/migrations/v47.js +1 -1
- package/dist/db/migrations/v48.js +1 -1
- package/dist/db/migrations/v49.js +1 -1
- package/dist/db/migrations/v50.js +8 -7
- package/dist/db/migrations/v52.js +1 -1
- package/dist/db/open.d.ts +9 -1
- package/dist/db/open.js +21 -4
- package/dist/{physics-state.d.ts → db/physics-state.d.ts} +3 -3
- package/dist/{physics-state.js → db/physics-state.js} +9 -16
- package/dist/{raw-archive-mirror-cleanup.d.ts → db/raw-archive-mirror-cleanup.d.ts} +5 -5
- package/dist/{raw-archive-mirror-cleanup.js → db/raw-archive-mirror-cleanup.js} +11 -6
- package/dist/db/request-stores.d.ts +15 -2
- package/dist/db/request-stores.js +37 -15
- package/dist/db/tables.d.ts +2 -0
- package/dist/db/tables.js +6 -0
- package/dist/{vector-store.d.ts → db/vector-store.d.ts} +4 -2
- package/dist/{vector-store.js → db/vector-store.js} +76 -51
- package/dist/db/wal-checkpointer.d.ts +11 -0
- package/dist/db/wal-checkpointer.js +92 -0
- package/dist/doctor.js +105 -136
- package/dist/entry/json-hooks.d.ts +1 -1
- package/dist/entry/json-hooks.js +1 -1
- package/dist/entry/project-identity.d.ts +1 -1
- package/dist/entry/project-identity.js +1 -1
- package/dist/entry/session-text.d.ts +3 -3
- package/dist/entry/session-text.js +3 -3
- package/dist/{eval-stats.js → eval/eval-stats.js} +12 -9
- package/dist/{eval-suite.d.ts → eval/eval-suite.d.ts} +1 -1
- package/dist/{eval-suite.js → eval/eval-suite.js} +25 -23
- package/dist/{eval.d.ts → eval/eval.d.ts} +1 -1
- package/dist/{eval.js → eval/eval.js} +29 -22
- package/dist/{judgment.d.ts → eval/judgment.d.ts} +1 -3
- package/dist/{judgment.js → eval/judgment.js} +4 -9
- package/dist/extensions/openclaw-plugin/index.js +1 -2
- package/dist/graph/delta.d.ts +3 -2
- package/dist/graph/delta.js +9 -23
- package/dist/{graph-extract.d.ts → graph/extract.d.ts} +6 -6
- package/dist/{graph-extract.js → graph/extract.js} +37 -52
- package/dist/{graph-recall.d.ts → graph/recall.d.ts} +2 -2
- package/dist/{graph-recall.js → graph/recall.js} +55 -36
- package/dist/{graph-stream.d.ts → graph/stream.d.ts} +2 -2
- package/dist/{graph-stream.js → graph/stream.js} +9 -7
- package/dist/{graph-view.d.ts → graph/view.d.ts} +6 -3
- package/dist/{graph-view.js → graph/view.js} +127 -167
- package/dist/graph/write.d.ts +4 -76
- package/dist/graph/write.js +13 -397
- package/dist/hooks/codex-session.js +1 -1
- package/dist/hooks/codex-wrapper.js +14 -15
- package/dist/hooks/copilot.d.ts +1 -8
- package/dist/hooks/copilot.js +14 -15
- package/dist/{cli → hooks}/hook-blocks.js +1 -1
- package/dist/hooks/json-hooks.d.ts +1 -1
- package/dist/hooks/json-hooks.js +31 -122
- package/dist/hooks/opencode.js +35 -27
- package/dist/hooks/shared.d.ts +0 -4
- package/dist/hooks/shared.js +1 -5
- package/dist/importers/core.d.ts +2 -6
- package/dist/importers/core.js +41 -39
- package/dist/importers/markdown-parse.d.ts +1 -10
- package/dist/importers/markdown-parse.js +2 -19
- package/dist/importers/markdown.js +2 -1
- package/dist/importers/sources.js +50 -46
- package/dist/importers/vault.js +71 -92
- package/dist/index.d.ts +22 -22
- package/dist/index.js +21 -21
- package/dist/{autolearn.d.ts → learn/autolearn.d.ts} +2 -2
- package/dist/{autolearn.js → learn/autolearn.js} +13 -11
- package/dist/{churn-git.d.ts → learn/churn-git.d.ts} +1 -1
- package/dist/{churn-git.js → learn/churn-git.js} +6 -4
- package/dist/{extract.d.ts → learn/extract.d.ts} +1 -1
- package/dist/learn/extract.js +125 -0
- package/dist/{forward-claim-detector.d.ts → learn/forward-claim-detector.d.ts} +1 -1
- package/dist/{forward-claim-detector.js → learn/forward-claim-detector.js} +1 -1
- package/dist/{invalidation.d.ts → learn/invalidation.d.ts} +4 -0
- package/dist/{invalidation.js → learn/invalidation.js} +83 -99
- package/dist/mcp/admin-tools.d.ts +1 -1
- package/dist/mcp/admin-tools.js +37 -60
- package/dist/mcp/format.d.ts +5 -5
- package/dist/mcp/format.js +7 -6
- package/dist/mcp/framing.d.ts +6 -0
- package/dist/mcp/framing.js +11 -3
- package/dist/mcp/memory-tools.js +7 -27
- package/dist/mcp/protocol.d.ts +6 -10
- package/dist/mcp/protocol.js +8 -14
- package/dist/mcp/recall-tools.d.ts +2 -2
- package/dist/mcp/recall-tools.js +68 -50
- package/dist/mcp/request.js +62 -60
- package/dist/mcp/server.js +1 -1
- package/dist/mcp/session-state.d.ts +1 -2
- package/dist/mcp/session-state.js +2 -2
- package/dist/mcp/shared-gate.js +1 -1
- package/dist/mcp/stdio.js +69 -31
- package/dist/mcp/tool-args.js +2 -1
- package/dist/mcp/tools.js +2 -2
- package/dist/{customer-notes.d.ts → objects/customer-notes.d.ts} +7 -24
- package/dist/objects/customer-notes.js +112 -0
- package/dist/{decisions.d.ts → objects/decisions.d.ts} +13 -28
- package/dist/objects/decisions.js +101 -0
- package/dist/objects/descriptor.d.ts +52 -0
- package/dist/objects/descriptor.js +4 -0
- package/dist/objects/fields.d.ts +15 -0
- package/dist/objects/fields.js +21 -0
- package/dist/{incidents.d.ts → objects/incidents.d.ts} +17 -44
- package/dist/objects/incidents.js +130 -0
- package/dist/objects/lifecycle.d.ts +27 -0
- package/dist/objects/lifecycle.js +96 -0
- package/dist/{policies.d.ts → objects/policies.d.ts} +14 -27
- package/dist/objects/policies.js +189 -0
- package/dist/{processes.d.ts → objects/processes.d.ts} +14 -34
- package/dist/objects/processes.js +146 -0
- package/dist/{project-briefs.d.ts → objects/project-briefs.d.ts} +19 -40
- package/dist/objects/project-briefs.js +255 -0
- package/dist/{skills.d.ts → objects/skills.d.ts} +11 -26
- package/dist/objects/skills.js +156 -0
- package/dist/postinstall.js +4 -2
- package/dist/predictions/planning-fallacy.d.ts +4 -76
- package/dist/predictions/planning-fallacy.js +4 -129
- package/dist/rerankers/clef.d.ts +2 -6
- package/dist/rerankers/clef.js +27 -47
- package/dist/rerankers/cross-encoder.d.ts +0 -7
- package/dist/rerankers/cross-encoder.js +15 -23
- package/dist/rerankers/index.js +8 -7
- package/dist/rerankers/jev.d.ts +1 -4
- package/dist/rerankers/jev.js +30 -49
- package/dist/rerankers/llm.d.ts +2 -4
- package/dist/rerankers/llm.js +33 -50
- package/dist/rerankers/outage-warning.d.ts +7 -0
- package/dist/rerankers/outage-warning.js +31 -0
- package/dist/rerankers/remote.d.ts +3 -0
- package/dist/rerankers/remote.js +23 -0
- package/dist/rerankers/types.d.ts +1 -1
- package/dist/search/as-of.d.ts +1 -1
- package/dist/search/bm25-search.d.ts +2 -2
- package/dist/search/bm25-search.js +7 -7
- package/dist/search/bm25.d.ts +1 -1
- package/dist/search/bm25.js +1 -1
- package/dist/search/boosts.d.ts +5 -1
- package/dist/search/boosts.js +34 -13
- package/dist/search/breakdown.d.ts +2 -2
- package/dist/search/breakdown.js +2 -1
- package/dist/search/explain.d.ts +1 -1
- package/dist/search/explain.js +3 -2
- package/dist/search/finalize.d.ts +2 -2
- package/dist/search/finalize.js +4 -3
- package/dist/search/fusion.d.ts +1 -1
- package/dist/search/fusion.js +3 -3
- package/dist/search/hybrid-score.d.ts +2 -2
- package/dist/search/hybrid-score.js +1 -1
- package/dist/search/hybrid.d.ts +4 -4
- package/dist/search/hybrid.js +11 -8
- package/dist/{multihop.d.ts → search/multihop.d.ts} +2 -2
- package/dist/{multihop.js → search/multihop.js} +7 -5
- package/dist/{path-context.js → search/path-context.js} +3 -1
- package/dist/search/physics-search.d.ts +4 -4
- package/dist/search/physics-search.js +15 -15
- package/dist/search/rerank.d.ts +3 -3
- package/dist/search/rerank.js +4 -3
- package/dist/search/temporal.d.ts +1 -1
- package/dist/search/temporal.js +5 -2
- package/dist/search/vector.d.ts +3 -3
- package/dist/search/vector.js +17 -11
- package/dist/server/auth.d.ts +1 -1
- package/dist/server/auth.js +26 -18
- package/dist/server/boot.d.ts +24 -0
- package/dist/server/boot.js +465 -0
- package/dist/server/client-ip.d.ts +5 -1
- package/dist/server/client-ip.js +18 -6
- package/dist/server/cursor.d.ts +1 -1
- package/dist/server/cursor.js +2 -3
- package/dist/server/deadline.d.ts +13 -0
- package/dist/server/deadline.js +45 -0
- package/dist/server/key-check-bounds.d.ts +8 -0
- package/dist/server/key-check-bounds.js +46 -0
- package/dist/server/lifecycle.js +1 -1
- package/dist/server/mcp-http.d.ts +1 -4
- package/dist/server/mcp-http.js +34 -24
- package/dist/server/ready.d.ts +7 -0
- package/dist/server/ready.js +38 -0
- package/dist/server/request.d.ts +10 -4
- package/dist/server/request.js +63 -12
- package/dist/server/route-table.d.ts +15 -0
- package/dist/server/route-table.js +209 -0
- package/dist/server/routes/admin.js +13 -8
- package/dist/server/routes/customer-notes.d.ts +5 -5
- package/dist/server/routes/customer-notes.js +32 -97
- package/dist/server/routes/decisions.d.ts +5 -5
- package/dist/server/routes/decisions.js +42 -105
- package/dist/server/routes/incidents.d.ts +5 -5
- package/dist/server/routes/incidents.js +42 -95
- package/dist/server/routes/memories.js +12 -14
- package/dist/server/routes/object-routes.d.ts +40 -0
- package/dist/server/routes/object-routes.js +80 -0
- package/dist/server/routes/policies.d.ts +6 -6
- package/dist/server/routes/policies.js +40 -124
- package/dist/server/routes/predictions.js +29 -45
- package/dist/server/routes/processes.d.ts +5 -5
- package/dist/server/routes/processes.js +38 -118
- package/dist/server/routes/project-briefs.d.ts +6 -6
- package/dist/server/routes/project-briefs.js +38 -110
- package/dist/server/routes/recall.js +14 -12
- package/dist/server/routes/skills.d.ts +6 -6
- package/dist/server/routes/skills.js +37 -125
- package/dist/{server-detect.js → server/server-detect.js} +1 -1
- package/dist/server/sleep-child.d.ts +2 -0
- package/dist/server/sleep-child.js +19 -0
- package/dist/server/sleep-offload.d.ts +20 -0
- package/dist/server/sleep-offload.js +70 -0
- package/dist/server/tls.d.ts +6 -0
- package/dist/server/tls.js +24 -0
- package/dist/server/types.d.ts +27 -8
- package/dist/server/validation.d.ts +3 -4
- package/dist/server/validation.js +6 -11
- package/dist/server.d.ts +39 -61
- package/dist/server.js +24 -568
- package/dist/{project-merge.d.ts → sharing/project-merge.d.ts} +1 -1
- package/dist/{project-merge.js → sharing/project-merge.js} +26 -45
- package/dist/{scope.js → sharing/scope.js} +1 -1
- package/dist/{shared.d.ts → sharing/shared.d.ts} +10 -9
- package/dist/{shared.js → sharing/shared.js} +100 -77
- package/dist/{ambient-store.d.ts → store/ambient.d.ts} +2 -2
- package/dist/{ambient-store.js → store/ambient.js} +10 -10
- package/dist/store/audit-event.d.ts +11 -5
- package/dist/store/audit-event.js +5 -4
- package/dist/{audit.d.ts → store/audit.d.ts} +27 -3
- package/dist/{audit.js → store/audit.js} +91 -6
- package/dist/{auth.d.ts → store/auth.d.ts} +15 -32
- package/dist/{auth.js → store/auth.js} +100 -92
- package/dist/store/candidates.d.ts +23 -12
- package/dist/store/candidates.js +87 -35
- package/dist/{card-detail.d.ts → store/card-detail.d.ts} +3 -3
- package/dist/{card-detail.js → store/card-detail.js} +1 -1
- package/dist/{store-cards.d.ts → store/cards.d.ts} +14 -9
- package/dist/{store-cards.js → store/cards.js} +85 -146
- package/dist/store/compactions.d.ts +78 -0
- package/dist/store/compactions.js +93 -0
- package/dist/store/conflicts.d.ts +22 -5
- package/dist/store/conflicts.js +160 -109
- package/dist/store/connectors/github.d.ts +84 -0
- package/dist/store/connectors/github.js +180 -0
- package/dist/store/connectors/slack.d.ts +69 -0
- package/dist/store/connectors/slack.js +177 -0
- package/dist/store/dashboard-reads.d.ts +27 -0
- package/dist/store/dashboard-reads.js +92 -0
- package/dist/store/delete-and-batch.d.ts +20 -24
- package/dist/store/delete-and-batch.js +64 -40
- package/dist/{delivery-recorder.d.ts → store/delivery-recorder.d.ts} +12 -5
- package/dist/{delivery-recorder.js → store/delivery-recorder.js} +42 -30
- package/dist/store/descendant-page.d.ts +12 -0
- package/dist/store/descendant-page.js +99 -0
- package/dist/store/diagnostics.d.ts +47 -0
- package/dist/store/diagnostics.js +51 -0
- package/dist/store/doctor-reads.d.ts +16 -0
- package/dist/store/doctor-reads.js +19 -0
- package/dist/{dormant.d.ts → store/dormant.d.ts} +46 -12
- package/dist/{dormant.js → store/dormant.js} +151 -6
- package/dist/{embeddings.d.ts → store/embeddings/index.d.ts} +10 -6
- package/dist/{embeddings.js → store/embeddings/index.js} +60 -44
- package/dist/{local-embedding.d.ts → store/embeddings/local.d.ts} +1 -1
- package/dist/{local-embedding.js → store/embeddings/local.js} +68 -57
- package/dist/{embedding-provider.d.ts → store/embeddings/provider.d.ts} +2 -2
- package/dist/{embedding-provider.js → store/embeddings/provider.js} +47 -32
- package/dist/store/entry-reads.d.ts +46 -7
- package/dist/store/entry-reads.js +120 -21
- package/dist/store/entry-row.d.ts +8 -2
- package/dist/store/entry-row.js +28 -8
- package/dist/store/entry-writes.d.ts +33 -4
- package/dist/store/entry-writes.js +108 -26
- package/dist/{failure-log.d.ts → store/failure-log.d.ts} +7 -2
- package/dist/{failure-log.js → store/failure-log.js} +9 -2
- package/dist/{goals.d.ts → store/goals.d.ts} +6 -46
- package/dist/{goals.js → store/goals.js} +45 -94
- package/dist/store/graph-queue.d.ts +29 -0
- package/dist/store/graph-queue.js +101 -0
- package/dist/{graph/read.d.ts → store/graph-reads.d.ts} +26 -34
- package/dist/{graph/read.js → store/graph-reads.js} +63 -115
- package/dist/{graph/types.d.ts → store/graph-rows.d.ts} +68 -8
- package/dist/{graph/rows.js → store/graph-rows.js} +14 -3
- package/dist/store/graph-view-rows.d.ts +12 -0
- package/dist/store/graph-view-rows.js +67 -0
- package/dist/store/graph-writes.d.ts +58 -0
- package/dist/store/graph-writes.js +256 -0
- package/dist/store/half-life.d.ts +34 -0
- package/dist/store/half-life.js +77 -0
- package/dist/store/handoffs.d.ts +1 -1
- package/dist/store/handoffs.js +39 -30
- package/dist/store/index-and-stats.d.ts +8 -1
- package/dist/store/index-and-stats.js +51 -48
- package/dist/store/index.d.ts +4 -0
- package/dist/store/index.js +3 -0
- package/dist/store/key-audit.d.ts +2 -2
- package/dist/store/key-audit.js +4 -4
- package/dist/store/key-writes.d.ts +12 -5
- package/dist/store/key-writes.js +30 -4
- package/dist/store/ledger-turn.d.ts +17 -0
- package/dist/store/ledger-turn.js +27 -0
- package/dist/store/markdown.d.ts +1 -1
- package/dist/store/markdown.js +4 -3
- package/dist/store/mirrors.d.ts +5 -7
- package/dist/store/mirrors.js +39 -25
- package/dist/store/object-types.d.ts +189 -0
- package/dist/store/object-types.js +4 -0
- package/dist/store/open.d.ts +6 -4
- package/dist/store/open.js +24 -23
- package/dist/store/planning-fallacy-evidence.d.ts +42 -0
- package/dist/store/planning-fallacy-evidence.js +81 -0
- package/dist/store/port.d.ts +646 -0
- package/dist/store/port.js +17 -0
- package/dist/{predictions/store.d.ts → store/predictions.d.ts} +15 -2
- package/dist/{predictions/store.js → store/predictions.js} +52 -67
- package/dist/{quarantine.d.ts → store/quarantine.d.ts} +8 -8
- package/dist/{quarantine.js → store/quarantine.js} +64 -22
- package/dist/{raw-archive.d.ts → store/raw-archive.d.ts} +3 -1
- package/dist/{raw-archive.js → store/raw-archive.js} +6 -2
- package/dist/{recall-scope.d.ts → store/recall-scope.d.ts} +2 -2
- package/dist/{recall-scope.js → store/recall-scope.js} +3 -3
- package/dist/{recall-trace.d.ts → store/recall-trace.d.ts} +13 -14
- package/dist/{recall-trace.js → store/recall-trace.js} +38 -43
- package/dist/store/rejected-values.d.ts +55 -0
- package/dist/store/rejected-values.js +162 -0
- package/dist/{rejection.d.ts → store/rejection.d.ts} +2 -2
- package/dist/{rejection.js → store/rejection.js} +3 -2
- package/dist/store/rows.d.ts +2 -3
- package/dist/store/rows.js +18 -11
- package/dist/store/search-rows.d.ts +15 -4
- package/dist/store/search-rows.js +41 -28
- package/dist/store/sessions.d.ts +13 -2
- package/dist/store/sessions.js +79 -45
- package/dist/store/sqlite/commit-watch.d.ts +4 -0
- package/dist/store/sqlite/commit-watch.js +29 -0
- package/dist/store/sqlite/connector-events-group.d.ts +5 -0
- package/dist/store/sqlite/connector-events-group.js +50 -0
- package/dist/store/sqlite/connector-writes-group.d.ts +6 -0
- package/dist/store/sqlite/connector-writes-group.js +65 -0
- package/dist/store/sqlite/dag-reads-group.d.ts +3 -0
- package/dist/store/sqlite/dag-reads-group.js +45 -0
- package/dist/store/sqlite/entry-writes-group.d.ts +18 -0
- package/dist/store/{entry-writes-group.js → sqlite/entry-writes-group.js} +73 -60
- package/dist/store/sqlite/error-codec.d.ts +17 -0
- package/dist/store/sqlite/error-codec.js +59 -0
- package/dist/store/sqlite/executor-counts.d.ts +10 -0
- package/dist/store/sqlite/executor-counts.js +11 -0
- package/dist/store/sqlite/executor.d.ts +28 -0
- package/dist/store/sqlite/executor.js +286 -0
- package/dist/store/sqlite/graph-reads-group.d.ts +5 -0
- package/dist/store/sqlite/graph-reads-group.js +18 -0
- package/dist/store/sqlite/local.d.ts +21 -0
- package/dist/store/sqlite/local.js +38 -0
- package/dist/store/sqlite/object-rows.d.ts +102 -0
- package/dist/store/sqlite/object-rows.js +218 -0
- package/dist/store/sqlite/objects-group.d.ts +20 -0
- package/dist/store/sqlite/objects-group.js +314 -0
- package/dist/store/sqlite/predictions-group.d.ts +5 -0
- package/dist/store/sqlite/predictions-group.js +28 -0
- package/dist/store/sqlite/quarantine-group.d.ts +5 -0
- package/dist/store/sqlite/quarantine-group.js +38 -0
- package/dist/store/sqlite/store.d.ts +26 -0
- package/dist/store/sqlite/store.js +295 -0
- package/dist/store/sqlite/vector-pack.d.ts +18 -0
- package/dist/store/sqlite/vector-pack.js +46 -0
- package/dist/store/sqlite/vector-reads-group.d.ts +3 -0
- package/dist/store/sqlite/vector-reads-group.js +23 -0
- package/dist/store/sqlite/worker-entry.d.ts +2 -0
- package/dist/store/sqlite/worker-entry.js +8 -0
- package/dist/store/sqlite/worker-jobs.d.ts +5 -0
- package/dist/store/sqlite/worker-jobs.js +116 -0
- package/dist/store/sqlite/worker-ops.d.ts +124 -0
- package/dist/store/sqlite/worker-ops.js +82 -0
- package/dist/store/sqlite/worker-store.d.ts +8 -0
- package/dist/store/sqlite/worker-store.js +76 -0
- package/dist/store/summaries.d.ts +2 -11
- package/dist/store/summaries.js +17 -44
- package/dist/{summary-dirty.d.ts → store/summary-dirty.d.ts} +1 -1
- package/dist/store/tenant-lookup.d.ts +1 -1
- package/dist/{tenant.d.ts → store/tenant.d.ts} +2 -2
- package/dist/{tenant.js → store/tenant.js} +1 -1
- package/dist/store/token-ledger-rows.d.ts +61 -0
- package/dist/store/token-ledger-rows.js +68 -0
- package/dist/{token-ledger.d.ts → store/token-ledger.d.ts} +2 -9
- package/dist/{token-ledger.js → store/token-ledger.js} +31 -78
- package/dist/store/tombstone-checks.d.ts +12 -0
- package/dist/store/tombstone-checks.js +31 -0
- package/dist/store/usage-reports.d.ts +7 -0
- package/dist/store/usage-reports.js +26 -0
- package/dist/store/vector-writes.d.ts +10 -3
- package/dist/store/vector-writes.js +35 -5
- package/dist/{working-memory.d.ts → store/working-memory.d.ts} +5 -1
- package/dist/{working-memory.js → store/working-memory.js} +39 -41
- package/dist/support-bundle.d.ts +1 -1
- package/dist/support-bundle.js +13 -33
- package/dist/{gated-write.d.ts → trust/gated-write.d.ts} +2 -2
- package/dist/{gated-write.js → trust/gated-write.js} +6 -6
- package/dist/trust/quarantine.d.ts +4 -0
- package/dist/trust/quarantine.js +8 -0
- package/dist/trust/reject-flow.d.ts +23 -0
- package/dist/trust/reject-flow.js +67 -0
- package/dist/util/anthropic-messages.d.ts +31 -0
- package/dist/util/anthropic-messages.js +46 -0
- package/dist/util/atomic-write.d.ts +3 -0
- package/dist/util/atomic-write.js +107 -0
- package/dist/util/crash-handlers.d.ts +5 -0
- package/dist/util/crash-handlers.js +30 -0
- package/dist/{env.d.ts → util/env.d.ts} +15 -2
- package/dist/{env.js → util/env.js} +20 -2
- package/dist/util/home-path.js +67 -0
- package/dist/{http-retry.d.ts → util/http-retry.d.ts} +6 -2
- package/dist/{http-retry.js → util/http-retry.js} +38 -7
- package/dist/{http-util.d.ts → util/http-util.d.ts} +14 -3
- package/dist/{http-util.js → util/http-util.js} +31 -11
- package/dist/util/json.d.ts +17 -0
- package/dist/util/json.js +25 -0
- package/dist/{log.d.ts → util/log.d.ts} +5 -2
- package/dist/{log.js → util/log.js} +12 -3
- package/dist/util/real-path.d.ts +3 -0
- package/dist/util/real-path.js +15 -0
- package/dist/util/request-scope.d.ts +27 -0
- package/dist/util/request-scope.js +47 -0
- package/dist/{same-text.d.ts → util/same-text.d.ts} +1 -1
- package/dist/{secret-detect.js → util/secret-detect.js} +5 -4
- package/dist/util/stored-json.d.ts +9 -0
- package/dist/util/stored-json.js +8 -0
- package/dist/util/time.d.ts +2 -0
- package/dist/util/time.js +3 -0
- package/dist/util/token-text.d.ts +18 -0
- package/dist/util/token-text.js +23 -0
- package/dist/{version.d.ts → util/version.d.ts} +1 -1
- package/dist/{version.js → util/version.js} +1 -1
- package/extensions/openclaw-plugin/index.ts +1 -5
- package/extensions/openclaw-plugin/openclaw.plugin.json +1 -1
- package/extensions/openclaw-plugin/package.json +1 -1
- package/openclaw.plugin.json +1 -1
- package/package.json +2 -2
- package/dist/api.d.ts +0 -26
- package/dist/api.js +0 -29
- package/dist/connectors/github/idempotency.d.ts +0 -19
- package/dist/connectors/github/idempotency.js +0 -27
- package/dist/connectors/slack/idempotency.d.ts +0 -17
- package/dist/connectors/slack/idempotency.js +0 -31
- package/dist/customer-notes.js +0 -336
- package/dist/db.d.ts +0 -9
- package/dist/db.js +0 -8
- package/dist/decisions.js +0 -326
- package/dist/extract.js +0 -133
- package/dist/graph/rows.d.ts +0 -45
- package/dist/graph/types.js +0 -11
- package/dist/half-life-migration.js +0 -182
- package/dist/handoff.js +0 -68
- package/dist/home-path.js +0 -24
- package/dist/incidents.js +0 -349
- package/dist/instruction-detect.js +0 -27
- package/dist/json.d.ts +0 -7
- package/dist/json.js +0 -11
- package/dist/ledger-db.d.ts +0 -10
- package/dist/ledger-db.js +0 -42
- package/dist/policies.js +0 -434
- package/dist/processes.js +0 -371
- package/dist/project-briefs.js +0 -523
- package/dist/reject-flow.d.ts +0 -69
- package/dist/reject-flow.js +0 -260
- package/dist/session-owners.d.ts +0 -7
- package/dist/session-owners.js +0 -54
- package/dist/skills.js +0 -367
- package/dist/store/entry-writes-group.d.ts +0 -9
- package/dist/store-port.d.ts +0 -262
- package/dist/store-port.js +0 -178
- /package/dist/{context-auto.d.ts → api/context-auto.d.ts} +0 -0
- /package/dist/{instruction-detect.d.ts → api/instruction-detect.d.ts} +0 -0
- /package/dist/{recall-history.d.ts → api/recall-history.d.ts} +0 -0
- /package/dist/{codex-patch.d.ts → capture/codex-patch.d.ts} +0 -0
- /package/dist/{compaction-items.d.ts → capture/compaction-items.d.ts} +0 -0
- /package/dist/{compaction-spool.d.ts → capture/compaction-spool.d.ts} +0 -0
- /package/dist/{share-scrub.d.ts → capture/share-scrub.d.ts} +0 -0
- /package/dist/{correction-latency.js → cli/correction-latency.js} +0 -0
- /package/dist/{provenance-coverage.js → cli/provenance-coverage.js} +0 -0
- /package/dist/{quality-repair.d.ts → cli/quality-repair.d.ts} +0 -0
- /package/dist/{stdin.d.ts → cli/stdin.d.ts} +0 -0
- /package/dist/{dedupe.d.ts → consolidate/dedupe.d.ts} +0 -0
- /package/dist/{memory-value-weights.d.ts → consolidate/memory-value-weights.d.ts} +0 -0
- /package/dist/{memory-value-weights.js → consolidate/memory-value-weights.js} +0 -0
- /package/dist/{overlap-index.d.ts → consolidate/overlap-index.d.ts} +0 -0
- /package/dist/{overlap-index.js → consolidate/overlap-index.js} +0 -0
- /package/dist/{trace.d.ts → consolidate/trace.d.ts} +0 -0
- /package/dist/{ablation.d.ts → core/ablation.d.ts} +0 -0
- /package/dist/{ambient.d.ts → core/ambient.d.ts} +0 -0
- /package/dist/{api-errors.d.ts → core/api-errors.d.ts} +0 -0
- /package/dist/{api-errors.js → core/api-errors.js} +0 -0
- /package/dist/{card.d.ts → core/card.d.ts} +0 -0
- /package/dist/{card.js → core/card.js} +0 -0
- /package/dist/{handoff.d.ts → core/handoff.d.ts} +0 -0
- /package/dist/{memory-quality.d.ts → core/memory-quality.d.ts} +0 -0
- /package/dist/{physics-config.d.ts → core/physics-config.d.ts} +0 -0
- /package/dist/{physics-config.js → core/physics-config.js} +0 -0
- /package/dist/{project-remote.d.ts → core/project-remote.d.ts} +0 -0
- /package/dist/{prompt-recall.d.ts → core/prompt-recall.d.ts} +0 -0
- /package/dist/{salience.d.ts → core/salience.d.ts} +0 -0
- /package/dist/{dashboard-params.d.ts → dashboard/dashboard-params.d.ts} +0 -0
- /package/dist/{dashboard-params.js → dashboard/dashboard-params.js} +0 -0
- /package/dist/{dashboard-types.d.ts → dashboard/dashboard-types.d.ts} +0 -0
- /package/dist/{dashboard-types.js → dashboard/dashboard-types.js} +0 -0
- /package/dist/{dashboard.d.ts → dashboard/dashboard.d.ts} +0 -0
- /package/dist/{eval-stats.d.ts → eval/eval-stats.d.ts} +0 -0
- /package/dist/{cli → hooks}/hook-blocks.d.ts +0 -0
- /package/dist/{path-context.d.ts → search/path-context.d.ts} +0 -0
- /package/dist/{rrf.d.ts → search/rrf.d.ts} +0 -0
- /package/dist/{rrf.js → search/rrf.js} +0 -0
- /package/dist/{rate-limit.d.ts → server/rate-limit.d.ts} +0 -0
- /package/dist/{rate-limit.js → server/rate-limit.js} +0 -0
- /package/dist/{server-detect.d.ts → server/server-detect.d.ts} +0 -0
- /package/dist/{scope.d.ts → sharing/scope.d.ts} +0 -0
- /package/dist/{summary-dirty.js → store/summary-dirty.js} +0 -0
- /package/dist/{yaml.d.ts → store/yaml.d.ts} +0 -0
- /package/dist/{yaml.js → store/yaml.js} +0 -0
- /package/dist/{escape.d.ts → util/escape.d.ts} +0 -0
- /package/dist/{escape.js → util/escape.js} +0 -0
- /package/dist/{home-path.d.ts → util/home-path.d.ts} +0 -0
- /package/dist/{keyset.d.ts → util/keyset.d.ts} +0 -0
- /package/dist/{keyset.js → util/keyset.js} +0 -0
- /package/dist/{same-text.js → util/same-text.js} +0 -0
- /package/dist/{secret-detect.d.ts → util/secret-detect.d.ts} +0 -0
- /package/dist/{db → util}/sqlite-blocked.d.ts +0 -0
- /package/dist/{db → util}/sqlite-blocked.js +0 -0
- /package/dist/{tokenize.d.ts → util/tokenize.d.ts} +0 -0
- /package/dist/{tokenize.js → util/tokenize.js} +0 -0
- /package/dist/{transcript-tail.d.ts → util/transcript-tail.d.ts} +0 -0
- /package/dist/{transcript-tail.js → util/transcript-tail.js} +0 -0
- /package/dist/{write-budget.d.ts → util/write-budget.d.ts} +0 -0
- /package/dist/{write-budget.js → util/write-budget.js} +0 -0
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
// The graph extraction queue: the consolidated memories that wait for a graph rebuild, and the watermark the sleep drain marks them by.
|
|
2
|
+
import { openHippoDb, closeHippoDb } from '../db/index.js';
|
|
3
|
+
import { assertTenantId } from './tenant.js';
|
|
4
|
+
import { errorMessage, log } from '../util/log.js';
|
|
5
|
+
import { rowToQueueItem, QUEUE_COLS } from './graph-rows.js';
|
|
6
|
+
import { resolveConsolidatedSource } from './graph-writes.js';
|
|
7
|
+
/**
|
|
8
|
+
* Enqueue a consolidated memory for later graph extraction. Rejects a raw / missing /
|
|
9
|
+
* cross-tenant memory (the DB trigger is the backstop).
|
|
10
|
+
*/
|
|
11
|
+
function enqueueExtraction(hippoRoot, tenantId, memoryId) {
|
|
12
|
+
assertTenantId('enqueueExtraction', tenantId);
|
|
13
|
+
const now = new Date().toISOString();
|
|
14
|
+
const db = openHippoDb(hippoRoot);
|
|
15
|
+
try {
|
|
16
|
+
// enqueue is memory-keyed (no source object), so a missing memory still throws (correct -
|
|
17
|
+
// you cannot enqueue a forgotten mirror); memoryId is non-null here by construction.
|
|
18
|
+
const { sourceKind } = resolveConsolidatedSource(db, tenantId, memoryId, null, 'enqueueExtraction');
|
|
19
|
+
const result = db.prepare(`
|
|
20
|
+
INSERT INTO graph_extraction_queue(tenant_id, memory_id, kind, status, enqueued_at, processed_at)
|
|
21
|
+
VALUES (?, ?, ?, 'pending', ?, NULL)
|
|
22
|
+
`).run(tenantId, memoryId, sourceKind, now);
|
|
23
|
+
const id = Number(result.lastInsertRowid ?? 0);
|
|
24
|
+
// SAFETY: row's shape matches the columns named in QUEUE_COLS above.
|
|
25
|
+
const row = db.prepare(`SELECT ${QUEUE_COLS} FROM graph_extraction_queue WHERE id = ?`).get(id);
|
|
26
|
+
if (!row)
|
|
27
|
+
throw new Error('enqueueExtraction: failed to reload queue item');
|
|
28
|
+
return rowToQueueItem(row);
|
|
29
|
+
}
|
|
30
|
+
finally {
|
|
31
|
+
closeHippoDb(db);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Fail-soft producer hook: mark a tenant dirty for graph re-extraction by
|
|
36
|
+
* enqueuing its consolidated mirror memory. NEVER throws into the caller — a
|
|
37
|
+
* graph-dirty signal failing must not abort a core object write. Graph staleness is
|
|
38
|
+
* recoverable (next sleep / manual `graph extract`); a broken `hippo decide` is
|
|
39
|
+
* not. Called POST-COMMIT from the graph-source save/close mutations of
|
|
40
|
+
* decision, policy, customer_note and project_brief. A null memoryId (a
|
|
41
|
+
* forgotten mirror) is a no-op.
|
|
42
|
+
*/
|
|
43
|
+
export function markGraphDirty(hippoRoot, tenantId, memoryId) {
|
|
44
|
+
if (!memoryId)
|
|
45
|
+
return;
|
|
46
|
+
try {
|
|
47
|
+
enqueueExtraction(hippoRoot, tenantId, memoryId);
|
|
48
|
+
}
|
|
49
|
+
catch (err) {
|
|
50
|
+
// Logged (warn) so a SYSTEMATIC enqueue failure surfaces to operators, but
|
|
51
|
+
// swallowed so the already-committed object write is never rolled back.
|
|
52
|
+
log.warn(`markGraphDirty: enqueue failed for tenant=${tenantId} memory=${memoryId}: ${errorMessage(err)}`);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Mark every pending queue item for a tenant with `id <= maxId` processed, in
|
|
57
|
+
* one UPDATE. Status/processed_at only, so the consolidated-source guard trigger
|
|
58
|
+
* is not involved. Returns the count marked.
|
|
59
|
+
* The `<= maxId` watermark excludes items enqueued after the drain snapshot.
|
|
60
|
+
*/
|
|
61
|
+
export function markPendingProcessedUpTo(hippoRoot, tenantId, maxId) {
|
|
62
|
+
assertTenantId('markPendingProcessedUpTo', tenantId);
|
|
63
|
+
const now = new Date().toISOString();
|
|
64
|
+
const db = openHippoDb(hippoRoot);
|
|
65
|
+
try {
|
|
66
|
+
const res = db.prepare(`
|
|
67
|
+
UPDATE graph_extraction_queue
|
|
68
|
+
SET status = 'processed', processed_at = ?
|
|
69
|
+
WHERE tenant_id = ? AND status = 'pending' AND id <= ?
|
|
70
|
+
`).run(now, tenantId, maxId);
|
|
71
|
+
return Number(res.changes ?? 0);
|
|
72
|
+
}
|
|
73
|
+
finally {
|
|
74
|
+
closeHippoDb(db);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* The dirty tenants awaiting graph re-extraction, each with the MAX pending
|
|
79
|
+
* queue id at read time (a watermark). The sleep drain rebuilds each tenant's
|
|
80
|
+
* graph, then marks only items at or below the watermark processed, so items
|
|
81
|
+
* enqueued DURING the rebuild stay pending for the next sleep (no lost-update
|
|
82
|
+
* race). Host-wide read (the queue is per-tenant but sleep is cross-tenant).
|
|
83
|
+
*/
|
|
84
|
+
export function loadPendingExtractionTenants(hippoRoot) {
|
|
85
|
+
const db = openHippoDb(hippoRoot);
|
|
86
|
+
try {
|
|
87
|
+
// SAFETY: rows' shape matches the two aliased columns (tenant_id, max_id)
|
|
88
|
+
// named in the SELECT above.
|
|
89
|
+
const rows = db.prepare(`
|
|
90
|
+
SELECT tenant_id AS tenant_id, MAX(id) AS max_id
|
|
91
|
+
FROM graph_extraction_queue
|
|
92
|
+
WHERE status = 'pending'
|
|
93
|
+
GROUP BY tenant_id
|
|
94
|
+
`).all();
|
|
95
|
+
return rows.map((r) => ({ tenantId: r.tenant_id, maxPendingId: Number(r.max_id) }));
|
|
96
|
+
}
|
|
97
|
+
finally {
|
|
98
|
+
closeHippoDb(db);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
//# sourceMappingURL=graph-queue.js.map
|
|
@@ -1,33 +1,30 @@
|
|
|
1
|
-
import { type
|
|
2
|
-
|
|
1
|
+
import { type DatabaseSyncLike } from '../db/index.js';
|
|
2
|
+
import { type EntityType, type Entity, type Relation, type StoredGraph } from './graph-rows.js';
|
|
3
3
|
/** Entities with an exact `name` (read), bounded by `limit` in SQL with a
|
|
4
4
|
* deterministic order. Lets the graph-view focus query find the `--entity NAME`
|
|
5
5
|
* entity DIRECTLY (not from a globally-capped list) WITHOUT materializing every
|
|
6
6
|
* same-name row when a name maps to many entities. */
|
|
7
7
|
export declare function loadEntitiesByName(hippoRoot: string, tenantId: string, name: string, opts?: {
|
|
8
8
|
limit?: number;
|
|
9
|
-
}, txDb?:
|
|
9
|
+
}, txDb?: DatabaseSyncLike): Entity[];
|
|
10
10
|
export declare function loadEntities(hippoRoot: string, tenantId: string, opts?: {
|
|
11
11
|
entityType?: EntityType;
|
|
12
12
|
limit?: number;
|
|
13
|
-
}, txDb?:
|
|
13
|
+
}, txDb?: DatabaseSyncLike): Entity[];
|
|
14
14
|
export declare function loadRelations(hippoRoot: string, tenantId: string, opts?: {
|
|
15
15
|
fromEntityId?: number;
|
|
16
16
|
limit?: number;
|
|
17
|
-
}, txDb?:
|
|
18
|
-
/**
|
|
19
|
-
*
|
|
20
|
-
|
|
21
|
-
* scoped, read-only; chunks the IN-list under the SQLite variable cap.
|
|
22
|
-
*/
|
|
23
|
-
export declare function loadEntitiesByMemoryId(hippoRoot: string, tenantId: string, memoryIds: string[]): Entity[];
|
|
17
|
+
}, txDb?: DatabaseSyncLike): Relation[];
|
|
18
|
+
/** Chunk size for IN-list queries: well under SQLite's 999-bound-variable default
|
|
19
|
+
* (leaves headroom for the tenant_id param + the doubled list in neighbour lookups). */
|
|
20
|
+
export declare const IN_LIST_CHUNK = 400;
|
|
24
21
|
/**
|
|
25
22
|
* Load entities by their primary ids. Resolves the entity rows reached during the BFS
|
|
26
23
|
* (whose `memory_id` maps back to a recall result). Tenant-scoped, read-only.
|
|
27
24
|
*/
|
|
28
|
-
export declare function loadEntitiesByIds(hippoRoot: string, tenantId: string, ids: number[], txDb?:
|
|
25
|
+
export declare function loadEntitiesByIds(hippoRoot: string, tenantId: string, ids: number[], txDb?: DatabaseSyncLike): Entity[];
|
|
29
26
|
/**
|
|
30
|
-
* All relations touching ANY of `entityIds` in EITHER direction (from OR to)
|
|
27
|
+
* All relations touching ANY of `entityIds` in EITHER direction (from OR to): the
|
|
31
28
|
* per-hop neighbour query for multi-hop traversal. ONE query for the whole frontier
|
|
32
29
|
* (not one per node): this is the bidirectional read `loadRelations` (from-only) lacks,
|
|
33
30
|
* and avoids an N+1 across BFS frontier nodes. `limit` caps rows for the frontier and
|
|
@@ -35,39 +32,34 @@ export declare function loadEntitiesByIds(hippoRoot: string, tenantId: string, i
|
|
|
35
32
|
*/
|
|
36
33
|
export declare function loadNeighborRelations(hippoRoot: string, tenantId: string, entityIds: number[], opts?: {
|
|
37
34
|
limit?: number;
|
|
38
|
-
}, txDb?:
|
|
35
|
+
}, txDb?: DatabaseSyncLike): Relation[];
|
|
39
36
|
/**
|
|
40
37
|
* Relations with BOTH endpoints in `entityIds` (edges AMONG the set, not merely
|
|
41
38
|
* touching it). Read. Used by the graph-view focus subgraph so the displayed
|
|
42
39
|
* edges are exactly the intra-union edges: the `LIMIT` only caps genuinely-many
|
|
43
|
-
* intra-union edges
|
|
40
|
+
* intra-union edges: no out-of-union row can evict a valid in-set edge. The
|
|
44
41
|
* caller bounds `entityIds` (<= the view limit), so a single query is safe.
|
|
45
42
|
*/
|
|
46
43
|
export declare function loadRelationsAmong(hippoRoot: string, tenantId: string, entityIds: number[], opts?: {
|
|
47
44
|
limit?: number;
|
|
48
|
-
}, txDb?:
|
|
45
|
+
}, txDb?: DatabaseSyncLike): Relation[];
|
|
46
|
+
/**
|
|
47
|
+
* Map consolidated source memory ids -> their graph entities. The SEED step of
|
|
48
|
+
* multi-hop recall (recall result memory ids -> entities to traverse from). Tenant-
|
|
49
|
+
* scoped, read-only; chunks the IN-list under the SQLite variable cap.
|
|
50
|
+
*/
|
|
51
|
+
export declare function loadEntitiesByMemoryId(hippoRoot: string, tenantId: string, memoryIds: string[]): Entity[];
|
|
52
|
+
/** The stored rows a rebuild diffs against, read on the caller's handle so the diff and the apply can share one write lock. */
|
|
53
|
+
export declare function storedGraphOn(db: DatabaseSyncLike, tenantId: string, memoryIds: readonly string[]): StoredGraph;
|
|
54
|
+
/** storedGraphOn on its own connection, outside any write lock. */
|
|
55
|
+
export declare function loadStoredGraph(hippoRoot: string, tenantId: string, memoryIds: readonly string[]): StoredGraph;
|
|
49
56
|
/**
|
|
50
57
|
* Run `fn` inside ONE read transaction (a single WAL snapshot) so every graph read
|
|
51
|
-
* it performs
|
|
58
|
+
* it performs (pass the supplied `txDb` to the `load*` functions) sees a consistent
|
|
52
59
|
* view, even if a `graph extract` / sleep-drain rebuild commits concurrently between
|
|
53
60
|
* reads (the rebuild clears + reinserts entities, so separate reads could otherwise
|
|
54
61
|
* mix old entity ids with new relation ids). Reads only; the connection is opened
|
|
55
62
|
* once and closed after.
|
|
56
63
|
*/
|
|
57
|
-
export declare function withGraphReadSnapshot<T>(hippoRoot: string, fn: (txDb:
|
|
58
|
-
|
|
59
|
-
status?: GraphQueueStatus;
|
|
60
|
-
limit?: number;
|
|
61
|
-
}): GraphQueueItem[];
|
|
62
|
-
/**
|
|
63
|
-
* The dirty tenants awaiting graph re-extraction, each with the MAX pending
|
|
64
|
-
* queue id at read time (a watermark). The sleep drain rebuilds each tenant's
|
|
65
|
-
* graph, then marks only items at or below the watermark processed, so items
|
|
66
|
-
* enqueued DURING the rebuild stay pending for the next sleep (no lost-update
|
|
67
|
-
* race). Host-wide read (the queue is per-tenant but sleep is cross-tenant).
|
|
68
|
-
*/
|
|
69
|
-
export declare function loadPendingExtractionTenants(hippoRoot: string): {
|
|
70
|
-
tenantId: string;
|
|
71
|
-
maxPendingId: number;
|
|
72
|
-
}[];
|
|
73
|
-
//# sourceMappingURL=read.d.ts.map
|
|
64
|
+
export declare function withGraphReadSnapshot<T>(hippoRoot: string, fn: (txDb: DatabaseSyncLike) => T): T;
|
|
65
|
+
//# sourceMappingURL=graph-reads.d.ts.map
|
|
@@ -1,27 +1,16 @@
|
|
|
1
|
-
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import { rowToEntity, rowToRelation,
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
const db = openHippoDb(hippoRoot);
|
|
8
|
-
try {
|
|
9
|
-
// SAFETY: row's shape matches the columns named in ENTITY_COLS above.
|
|
10
|
-
const row = db.prepare(`SELECT ${ENTITY_COLS} FROM entities WHERE id = ? AND tenant_id = ?`)
|
|
11
|
-
.get(id, tenantId);
|
|
12
|
-
return row ? rowToEntity(row) : null;
|
|
13
|
-
}
|
|
14
|
-
finally {
|
|
15
|
-
closeHippoDb(db);
|
|
16
|
-
}
|
|
17
|
-
}
|
|
1
|
+
// The graph reads a view and a traversal share. Each opens hippo.db itself unless the caller hands it the handle its snapshot runs on.
|
|
2
|
+
import { openHippoDb, closeHippoDb, withReadSnapshot } from '../db/index.js';
|
|
3
|
+
import { assertTenantId } from './tenant.js';
|
|
4
|
+
import { GRAPH_ENTITY_TYPES, rowToEntity, rowToRelation, ENTITY_COLS, RELATION_COLS } from './graph-rows.js';
|
|
5
|
+
const DEFAULT_GRAPH_PAGE_SIZE = 100;
|
|
6
|
+
const DEFAULT_GRAPH_SCAN_LIMIT = 1000;
|
|
18
7
|
/** Entities with an exact `name` (read), bounded by `limit` in SQL with a
|
|
19
8
|
* deterministic order. Lets the graph-view focus query find the `--entity NAME`
|
|
20
9
|
* entity DIRECTLY (not from a globally-capped list) WITHOUT materializing every
|
|
21
10
|
* same-name row when a name maps to many entities. */
|
|
22
11
|
export function loadEntitiesByName(hippoRoot, tenantId, name, opts = {}, txDb) {
|
|
23
12
|
assertTenantId('loadEntitiesByName', tenantId);
|
|
24
|
-
const limit = opts.limit ??
|
|
13
|
+
const limit = opts.limit ?? DEFAULT_GRAPH_PAGE_SIZE;
|
|
25
14
|
if (!Number.isInteger(limit) || limit < 0) {
|
|
26
15
|
throw new Error(`loadEntitiesByName: limit must be a non-negative integer; got ${limit}`);
|
|
27
16
|
}
|
|
@@ -42,7 +31,7 @@ export function loadEntitiesByName(hippoRoot, tenantId, name, opts = {}, txDb) {
|
|
|
42
31
|
}
|
|
43
32
|
export function loadEntities(hippoRoot, tenantId, opts = {}, txDb) {
|
|
44
33
|
assertTenantId('loadEntities', tenantId);
|
|
45
|
-
const limit = opts.limit ??
|
|
34
|
+
const limit = opts.limit ?? DEFAULT_GRAPH_PAGE_SIZE;
|
|
46
35
|
if (opts.entityType && !GRAPH_ENTITY_TYPES.has(opts.entityType)) {
|
|
47
36
|
throw new Error(`loadEntities: entityType must be one of ${Array.from(GRAPH_ENTITY_TYPES).join('|')}; got ${opts.entityType}`);
|
|
48
37
|
}
|
|
@@ -72,7 +61,7 @@ export function loadEntities(hippoRoot, tenantId, opts = {}, txDb) {
|
|
|
72
61
|
}
|
|
73
62
|
export function loadRelations(hippoRoot, tenantId, opts = {}, txDb) {
|
|
74
63
|
assertTenantId('loadRelations', tenantId);
|
|
75
|
-
const limit = opts.limit ??
|
|
64
|
+
const limit = opts.limit ?? DEFAULT_GRAPH_PAGE_SIZE;
|
|
76
65
|
const ownDb = txDb ? null : openHippoDb(hippoRoot);
|
|
77
66
|
const db = txDb ?? ownDb;
|
|
78
67
|
try {
|
|
@@ -97,43 +86,9 @@ export function loadRelations(hippoRoot, tenantId, opts = {}, txDb) {
|
|
|
97
86
|
closeHippoDb(ownDb);
|
|
98
87
|
}
|
|
99
88
|
}
|
|
100
|
-
// ---------------------------------------------------------------------------
|
|
101
|
-
// Multi-hop recall read helpers (SELECT-only; the check-graph-writes lint
|
|
102
|
-
// permits these here and in the read-only consumer src/graph-recall.ts).
|
|
103
|
-
// ---------------------------------------------------------------------------
|
|
104
89
|
/** Chunk size for IN-list queries: well under SQLite's 999-bound-variable default
|
|
105
90
|
* (leaves headroom for the tenant_id param + the doubled list in neighbour lookups). */
|
|
106
|
-
const IN_LIST_CHUNK = 400;
|
|
107
|
-
/**
|
|
108
|
-
* Map consolidated source memory ids -> their graph entities. The SEED step of
|
|
109
|
-
* multi-hop recall (recall result memory ids -> entities to traverse from). Tenant-
|
|
110
|
-
* scoped, read-only; chunks the IN-list under the SQLite variable cap.
|
|
111
|
-
*/
|
|
112
|
-
export function loadEntitiesByMemoryId(hippoRoot, tenantId, memoryIds) {
|
|
113
|
-
assertTenantId('loadEntitiesByMemoryId', tenantId);
|
|
114
|
-
if (memoryIds.length === 0)
|
|
115
|
-
return [];
|
|
116
|
-
const db = openHippoDb(hippoRoot);
|
|
117
|
-
try {
|
|
118
|
-
const out = [];
|
|
119
|
-
for (let i = 0; i < memoryIds.length; i += IN_LIST_CHUNK) {
|
|
120
|
-
const slice = memoryIds.slice(i, i + IN_LIST_CHUNK);
|
|
121
|
-
const ph = slice.map(() => '?').join(',');
|
|
122
|
-
// id ASC so chunk-local scan order never decides ties (id is an autoincrement PK).
|
|
123
|
-
// SAFETY: rows' shape matches the columns named in ENTITY_COLS above.
|
|
124
|
-
const rows = db.prepare(`
|
|
125
|
-
SELECT ${ENTITY_COLS} FROM entities
|
|
126
|
-
WHERE tenant_id = ? AND memory_id IN (${ph})
|
|
127
|
-
ORDER BY id ASC
|
|
128
|
-
`).all(tenantId, ...slice);
|
|
129
|
-
out.push(...rows.map(rowToEntity));
|
|
130
|
-
}
|
|
131
|
-
return out;
|
|
132
|
-
}
|
|
133
|
-
finally {
|
|
134
|
-
closeHippoDb(db);
|
|
135
|
-
}
|
|
136
|
-
}
|
|
91
|
+
export const IN_LIST_CHUNK = 400;
|
|
137
92
|
/**
|
|
138
93
|
* Load entities by their primary ids. Resolves the entity rows reached during the BFS
|
|
139
94
|
* (whose `memory_id` maps back to a recall result). Tenant-scoped, read-only.
|
|
@@ -164,7 +119,7 @@ export function loadEntitiesByIds(hippoRoot, tenantId, ids, txDb) {
|
|
|
164
119
|
}
|
|
165
120
|
}
|
|
166
121
|
/**
|
|
167
|
-
* All relations touching ANY of `entityIds` in EITHER direction (from OR to)
|
|
122
|
+
* All relations touching ANY of `entityIds` in EITHER direction (from OR to): the
|
|
168
123
|
* per-hop neighbour query for multi-hop traversal. ONE query for the whole frontier
|
|
169
124
|
* (not one per node): this is the bidirectional read `loadRelations` (from-only) lacks,
|
|
170
125
|
* and avoids an N+1 across BFS frontier nodes. `limit` caps rows for the frontier and
|
|
@@ -174,7 +129,7 @@ export function loadNeighborRelations(hippoRoot, tenantId, entityIds, opts = {},
|
|
|
174
129
|
assertTenantId('loadNeighborRelations', tenantId);
|
|
175
130
|
if (entityIds.length === 0)
|
|
176
131
|
return [];
|
|
177
|
-
const limit = opts.limit ??
|
|
132
|
+
const limit = opts.limit ?? DEFAULT_GRAPH_SCAN_LIMIT;
|
|
178
133
|
if (!Number.isInteger(limit) || limit < 0) {
|
|
179
134
|
throw new Error(`loadNeighborRelations: limit must be a non-negative integer; got ${limit}`);
|
|
180
135
|
}
|
|
@@ -211,14 +166,14 @@ export function loadNeighborRelations(hippoRoot, tenantId, entityIds, opts = {},
|
|
|
211
166
|
* Relations with BOTH endpoints in `entityIds` (edges AMONG the set, not merely
|
|
212
167
|
* touching it). Read. Used by the graph-view focus subgraph so the displayed
|
|
213
168
|
* edges are exactly the intra-union edges: the `LIMIT` only caps genuinely-many
|
|
214
|
-
* intra-union edges
|
|
169
|
+
* intra-union edges: no out-of-union row can evict a valid in-set edge. The
|
|
215
170
|
* caller bounds `entityIds` (<= the view limit), so a single query is safe.
|
|
216
171
|
*/
|
|
217
172
|
export function loadRelationsAmong(hippoRoot, tenantId, entityIds, opts = {}, txDb) {
|
|
218
173
|
assertTenantId('loadRelationsAmong', tenantId);
|
|
219
174
|
if (entityIds.length === 0)
|
|
220
175
|
return [];
|
|
221
|
-
const limit = opts.limit ??
|
|
176
|
+
const limit = opts.limit ?? DEFAULT_GRAPH_SCAN_LIMIT;
|
|
222
177
|
if (!Number.isInteger(limit) || limit < 0) {
|
|
223
178
|
throw new Error(`loadRelationsAmong: limit must be a non-negative integer; got ${limit}`);
|
|
224
179
|
}
|
|
@@ -241,84 +196,77 @@ export function loadRelationsAmong(hippoRoot, tenantId, entityIds, opts = {}, tx
|
|
|
241
196
|
}
|
|
242
197
|
}
|
|
243
198
|
/**
|
|
244
|
-
*
|
|
245
|
-
*
|
|
246
|
-
*
|
|
247
|
-
* reads (the rebuild clears + reinserts entities, so separate reads could otherwise
|
|
248
|
-
* mix old entity ids with new relation ids). Reads only; the connection is opened
|
|
249
|
-
* once and closed after.
|
|
199
|
+
* Map consolidated source memory ids -> their graph entities. The SEED step of
|
|
200
|
+
* multi-hop recall (recall result memory ids -> entities to traverse from). Tenant-
|
|
201
|
+
* scoped, read-only; chunks the IN-list under the SQLite variable cap.
|
|
250
202
|
*/
|
|
251
|
-
export function
|
|
203
|
+
export function loadEntitiesByMemoryId(hippoRoot, tenantId, memoryIds) {
|
|
204
|
+
assertTenantId('loadEntitiesByMemoryId', tenantId);
|
|
205
|
+
if (memoryIds.length === 0)
|
|
206
|
+
return [];
|
|
252
207
|
const db = openHippoDb(hippoRoot);
|
|
253
208
|
try {
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
const
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
209
|
+
const out = [];
|
|
210
|
+
for (let i = 0; i < memoryIds.length; i += IN_LIST_CHUNK) {
|
|
211
|
+
const slice = memoryIds.slice(i, i + IN_LIST_CHUNK);
|
|
212
|
+
const ph = slice.map(() => '?').join(',');
|
|
213
|
+
// id ASC so chunk-local scan order never decides ties (id is an autoincrement PK).
|
|
214
|
+
// SAFETY: rows' shape matches the columns named in ENTITY_COLS above.
|
|
215
|
+
const rows = db.prepare(`
|
|
216
|
+
SELECT ${ENTITY_COLS} FROM entities
|
|
217
|
+
WHERE tenant_id = ? AND memory_id IN (${ph})
|
|
218
|
+
ORDER BY id ASC
|
|
219
|
+
`).all(tenantId, ...slice);
|
|
220
|
+
out.push(...rows.map(rowToEntity));
|
|
266
221
|
}
|
|
222
|
+
return out;
|
|
267
223
|
}
|
|
268
224
|
finally {
|
|
269
225
|
closeHippoDb(db);
|
|
270
226
|
}
|
|
271
227
|
}
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
const
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
228
|
+
/** The stored rows a rebuild diffs against, read on the caller's handle so the diff and the apply can share one write lock. */
|
|
229
|
+
export function storedGraphOn(db, tenantId, memoryIds) {
|
|
230
|
+
const kinds = memoryKindsOn(db, memoryIds);
|
|
231
|
+
// SAFETY: the SELECT names exactly the columns of StoredEntity.
|
|
232
|
+
const entities = db.prepare(`SELECT id, entity_type, name, memory_id, source_kind, source_object_type, source_object_id FROM entities WHERE tenant_id = ? ORDER BY id`).all(tenantId);
|
|
233
|
+
// SAFETY: the SELECT names exactly the columns of StoredRelation.
|
|
234
|
+
const relations = db.prepare(`SELECT id, from_entity_id, to_entity_id, rel_type, memory_id, source_kind, source_object_type, source_object_id FROM relations WHERE tenant_id = ? ORDER BY id`).all(tenantId);
|
|
235
|
+
return { kinds, entities, relations };
|
|
236
|
+
}
|
|
237
|
+
function memoryKindsOn(db, memoryIds) {
|
|
238
|
+
if (memoryIds.length === 0)
|
|
239
|
+
return new Map();
|
|
240
|
+
// SAFETY: the SELECT names exactly the two columns of the row type.
|
|
241
|
+
const rows = db.prepare(`SELECT id, kind FROM memories WHERE id IN (SELECT value FROM json_each(?))`)
|
|
242
|
+
.all(JSON.stringify(memoryIds));
|
|
243
|
+
return new Map(rows.map((row) => [row.id, row.kind]));
|
|
244
|
+
}
|
|
245
|
+
/** storedGraphOn on its own connection, outside any write lock. */
|
|
246
|
+
export function loadStoredGraph(hippoRoot, tenantId, memoryIds) {
|
|
278
247
|
const db = openHippoDb(hippoRoot);
|
|
279
248
|
try {
|
|
280
|
-
|
|
281
|
-
const params = [tenantId];
|
|
282
|
-
if (opts.status) {
|
|
283
|
-
clauses.push('status = ?');
|
|
284
|
-
params.push(opts.status);
|
|
285
|
-
}
|
|
286
|
-
params.push(limit);
|
|
287
|
-
// SAFETY: rows' shape matches the columns named in QUEUE_COLS above.
|
|
288
|
-
const rows = db.prepare(`
|
|
289
|
-
SELECT ${QUEUE_COLS} FROM graph_extraction_queue
|
|
290
|
-
WHERE ${clauses.join(' AND ')}
|
|
291
|
-
ORDER BY enqueued_at ASC, id ASC
|
|
292
|
-
LIMIT ?
|
|
293
|
-
`).all(...params);
|
|
294
|
-
return rows.map(rowToQueueItem);
|
|
249
|
+
return storedGraphOn(db, tenantId, memoryIds);
|
|
295
250
|
}
|
|
296
251
|
finally {
|
|
297
252
|
closeHippoDb(db);
|
|
298
253
|
}
|
|
299
254
|
}
|
|
300
255
|
/**
|
|
301
|
-
*
|
|
302
|
-
*
|
|
303
|
-
*
|
|
304
|
-
*
|
|
305
|
-
*
|
|
256
|
+
* Run `fn` inside ONE read transaction (a single WAL snapshot) so every graph read
|
|
257
|
+
* it performs (pass the supplied `txDb` to the `load*` functions) sees a consistent
|
|
258
|
+
* view, even if a `graph extract` / sleep-drain rebuild commits concurrently between
|
|
259
|
+
* reads (the rebuild clears + reinserts entities, so separate reads could otherwise
|
|
260
|
+
* mix old entity ids with new relation ids). Reads only; the connection is opened
|
|
261
|
+
* once and closed after.
|
|
306
262
|
*/
|
|
307
|
-
export function
|
|
263
|
+
export function withGraphReadSnapshot(hippoRoot, fn) {
|
|
308
264
|
const db = openHippoDb(hippoRoot);
|
|
309
265
|
try {
|
|
310
|
-
|
|
311
|
-
// named in the SELECT above.
|
|
312
|
-
const rows = db.prepare(`
|
|
313
|
-
SELECT tenant_id AS tenant_id, MAX(id) AS max_id
|
|
314
|
-
FROM graph_extraction_queue
|
|
315
|
-
WHERE status = 'pending'
|
|
316
|
-
GROUP BY tenant_id
|
|
317
|
-
`).all();
|
|
318
|
-
return rows.map((r) => ({ tenantId: r.tenant_id, maxPendingId: Number(r.max_id) }));
|
|
266
|
+
return withReadSnapshot(db, () => fn(db));
|
|
319
267
|
}
|
|
320
268
|
finally {
|
|
321
269
|
closeHippoDb(db);
|
|
322
270
|
}
|
|
323
271
|
}
|
|
324
|
-
//# sourceMappingURL=
|
|
272
|
+
//# sourceMappingURL=graph-reads.js.map
|
|
@@ -1,16 +1,11 @@
|
|
|
1
|
-
import { openHippoDb } from '../db.js';
|
|
2
|
-
/** The DB connection handle `openHippoDb` returns. Threaded (optionally) through
|
|
3
|
-
* the graph writers so `extractGraph` can run clear + all inserts in ONE
|
|
4
|
-
* transaction — see `runGraphRebuildTransaction`. */
|
|
5
|
-
export type GraphTxDb = ReturnType<typeof openHippoDb>;
|
|
6
1
|
export type EntityType = 'person' | 'project' | 'customer' | 'system' | 'policy' | 'decision';
|
|
7
2
|
export type RelationType = 'owns' | 'supersedes' | 'depends-on' | 'blocked-by' | 'references';
|
|
8
|
-
export type GraphQueueStatus = 'pending' | 'processed' | 'skipped';
|
|
9
3
|
/** The consolidated source kinds the graph is permitted to index (never 'raw'). */
|
|
10
4
|
export type SourceKind = 'distilled' | 'superseded';
|
|
11
5
|
/** The authoritative first-class object types a graph row may be anchored to (the object
|
|
12
6
|
* provenance path, alongside the memory path). Maps to source_object_type. */
|
|
13
7
|
export type SourceObjectType = 'decision' | 'policy' | 'customer' | 'project';
|
|
8
|
+
export declare const GRAPH_ENTITY_TYPES: ReadonlySet<EntityType>;
|
|
14
9
|
/** A soft (type,id) pointer to the authoritative object row a graph row descends from.
|
|
15
10
|
* Survives a mirror memory forget/prune (memory_id may go NULL); the rebuild
|
|
16
11
|
* re-validates it (it is not a hard FK). */
|
|
@@ -18,8 +13,8 @@ export interface SourceObjectRef {
|
|
|
18
13
|
type: SourceObjectType;
|
|
19
14
|
id: number;
|
|
20
15
|
}
|
|
21
|
-
export declare const GRAPH_ENTITY_TYPES: ReadonlySet<EntityType>;
|
|
22
16
|
export declare const GRAPH_RELATION_TYPES: ReadonlySet<RelationType>;
|
|
17
|
+
export type GraphQueueStatus = 'pending' | 'processed' | 'skipped';
|
|
23
18
|
export declare const VALID_QUEUE_STATES: ReadonlySet<GraphQueueStatus>;
|
|
24
19
|
export declare const MAX_ENTITY_NAME_LEN = 512;
|
|
25
20
|
export interface Entity {
|
|
@@ -51,6 +46,33 @@ export interface Relation {
|
|
|
51
46
|
sourceObjectId?: number;
|
|
52
47
|
createdAt: string;
|
|
53
48
|
}
|
|
49
|
+
export interface EntityRow {
|
|
50
|
+
id: number;
|
|
51
|
+
tenant_id: string;
|
|
52
|
+
entity_type: string;
|
|
53
|
+
name: string;
|
|
54
|
+
memory_id: string | null;
|
|
55
|
+
source_kind: string;
|
|
56
|
+
source_object_type: string | null;
|
|
57
|
+
source_object_id: number | null;
|
|
58
|
+
created_at: string;
|
|
59
|
+
}
|
|
60
|
+
export interface RelationRow {
|
|
61
|
+
id: number;
|
|
62
|
+
tenant_id: string;
|
|
63
|
+
from_entity_id: number;
|
|
64
|
+
to_entity_id: number;
|
|
65
|
+
rel_type: string;
|
|
66
|
+
memory_id: string | null;
|
|
67
|
+
source_kind: string;
|
|
68
|
+
source_object_type: string | null;
|
|
69
|
+
source_object_id: number | null;
|
|
70
|
+
created_at: string;
|
|
71
|
+
}
|
|
72
|
+
export declare function rowToEntity(row: EntityRow): Entity;
|
|
73
|
+
export declare function rowToRelation(row: RelationRow): Relation;
|
|
74
|
+
export declare const ENTITY_COLS = "id, tenant_id, entity_type, name, memory_id, source_kind, source_object_type, source_object_id, created_at";
|
|
75
|
+
export declare const RELATION_COLS = "id, tenant_id, from_entity_id, to_entity_id, rel_type, memory_id, source_kind, source_object_type, source_object_id, created_at";
|
|
54
76
|
export interface GraphQueueItem {
|
|
55
77
|
id: number;
|
|
56
78
|
tenantId: string;
|
|
@@ -60,6 +82,17 @@ export interface GraphQueueItem {
|
|
|
60
82
|
enqueuedAt: string;
|
|
61
83
|
processedAt: string | null;
|
|
62
84
|
}
|
|
85
|
+
export interface QueueRow {
|
|
86
|
+
id: number;
|
|
87
|
+
tenant_id: string;
|
|
88
|
+
memory_id: string;
|
|
89
|
+
kind: string;
|
|
90
|
+
status: string;
|
|
91
|
+
enqueued_at: string;
|
|
92
|
+
processed_at: string | null;
|
|
93
|
+
}
|
|
94
|
+
export declare function rowToQueueItem(row: QueueRow): GraphQueueItem;
|
|
95
|
+
export declare const QUEUE_COLS = "id, tenant_id, memory_id, kind, status, enqueued_at, processed_at";
|
|
63
96
|
export interface InsertEntityOpts {
|
|
64
97
|
entityType: EntityType;
|
|
65
98
|
name: string;
|
|
@@ -85,4 +118,31 @@ export interface InsertRelationOpts {
|
|
|
85
118
|
/** The authoritative object this relation descends from. */
|
|
86
119
|
sourceObject?: SourceObjectRef;
|
|
87
120
|
}
|
|
88
|
-
|
|
121
|
+
/** The entity columns a rebuild diffs against. */
|
|
122
|
+
export interface StoredEntity {
|
|
123
|
+
id: number;
|
|
124
|
+
entity_type: string;
|
|
125
|
+
name: string;
|
|
126
|
+
memory_id: string | null;
|
|
127
|
+
source_kind: string;
|
|
128
|
+
source_object_type: string | null;
|
|
129
|
+
source_object_id: number | null;
|
|
130
|
+
}
|
|
131
|
+
/** The relation columns a rebuild diffs against. */
|
|
132
|
+
export interface StoredRelation {
|
|
133
|
+
id: number;
|
|
134
|
+
from_entity_id: number;
|
|
135
|
+
to_entity_id: number;
|
|
136
|
+
rel_type: string;
|
|
137
|
+
memory_id: string | null;
|
|
138
|
+
source_kind: string;
|
|
139
|
+
source_object_type: string | null;
|
|
140
|
+
source_object_id: number | null;
|
|
141
|
+
}
|
|
142
|
+
/** One tenant's stored graph as a rebuild reads it, with the kind of each memory the desired rows name. */
|
|
143
|
+
export interface StoredGraph {
|
|
144
|
+
readonly kinds: ReadonlyMap<string, string>;
|
|
145
|
+
readonly entities: readonly StoredEntity[];
|
|
146
|
+
readonly relations: readonly StoredRelation[];
|
|
147
|
+
}
|
|
148
|
+
//# sourceMappingURL=graph-rows.d.ts.map
|
|
@@ -1,3 +1,14 @@
|
|
|
1
|
+
// The graph's entity, relation and queue rows as hippo.db holds them, and the types every reader and writer of them shares.
|
|
2
|
+
export const GRAPH_ENTITY_TYPES = new Set([
|
|
3
|
+
'person', 'project', 'customer', 'system', 'policy', 'decision',
|
|
4
|
+
]);
|
|
5
|
+
export const GRAPH_RELATION_TYPES = new Set([
|
|
6
|
+
'owns', 'supersedes', 'depends-on', 'blocked-by', 'references',
|
|
7
|
+
]);
|
|
8
|
+
export const VALID_QUEUE_STATES = new Set([
|
|
9
|
+
'pending', 'processed', 'skipped',
|
|
10
|
+
]);
|
|
11
|
+
export const MAX_ENTITY_NAME_LEN = 512;
|
|
1
12
|
export function rowToEntity(row) {
|
|
2
13
|
// SAFETY: entity_type/source_kind/source_object_type are DB CHECK-constrained
|
|
3
14
|
// (see db.ts CREATE TABLE entities) to exactly the EntityType/SourceKind/
|
|
@@ -31,6 +42,8 @@ export function rowToRelation(row) {
|
|
|
31
42
|
createdAt: row.created_at,
|
|
32
43
|
};
|
|
33
44
|
}
|
|
45
|
+
export const ENTITY_COLS = `id, tenant_id, entity_type, name, memory_id, source_kind, source_object_type, source_object_id, created_at`;
|
|
46
|
+
export const RELATION_COLS = `id, tenant_id, from_entity_id, to_entity_id, rel_type, memory_id, source_kind, source_object_type, source_object_id, created_at`;
|
|
34
47
|
export function rowToQueueItem(row) {
|
|
35
48
|
// SAFETY: kind/status are DB CHECK-constrained (see db.ts CREATE TABLE
|
|
36
49
|
// graph_extraction_queue) to exactly the SourceKind/GraphQueueStatus enum
|
|
@@ -45,7 +58,5 @@ export function rowToQueueItem(row) {
|
|
|
45
58
|
processedAt: row.processed_at,
|
|
46
59
|
};
|
|
47
60
|
}
|
|
48
|
-
export const ENTITY_COLS = `id, tenant_id, entity_type, name, memory_id, source_kind, source_object_type, source_object_id, created_at`;
|
|
49
|
-
export const RELATION_COLS = `id, tenant_id, from_entity_id, to_entity_id, rel_type, memory_id, source_kind, source_object_type, source_object_id, created_at`;
|
|
50
61
|
export const QUEUE_COLS = `id, tenant_id, memory_id, kind, status, enqueued_at, processed_at`;
|
|
51
|
-
//# sourceMappingURL=rows.js.map
|
|
62
|
+
//# sourceMappingURL=graph-rows.js.map
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { DatabaseSyncLike } from '../db/index.js';
|
|
2
|
+
import type { GraphRows } from './port.js';
|
|
3
|
+
type CanRead = (scope: string | null) => boolean;
|
|
4
|
+
export interface GraphViewSpec {
|
|
5
|
+
readonly entity?: string;
|
|
6
|
+
readonly limit: number;
|
|
7
|
+
readonly canRead?: CanRead;
|
|
8
|
+
}
|
|
9
|
+
/** What `GraphReads.graphRows` answers, read on `db`: the caller opens the one snapshot that keeps entity ids and relation ids from two different rebuilds apart. */
|
|
10
|
+
export declare function graphViewRows(hippoRoot: string, db: DatabaseSyncLike, tenantId: string, spec: GraphViewSpec): GraphRows;
|
|
11
|
+
export {};
|
|
12
|
+
//# sourceMappingURL=graph-view-rows.d.ts.map
|