hippo-memory 1.68.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 +6 -3
- 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.d.ts +3 -1
- package/dist/agent-memories/copilot.js +5 -4
- 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 +14 -4
- package/dist/api/context-select.js +50 -60
- package/dist/api/context-types.d.ts +5 -5
- package/dist/api/context.d.ts +2 -4
- package/dist/api/context.js +113 -85
- 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 +4 -13
- package/dist/api/forget.js +13 -35
- 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 +9 -46
- package/dist/api/outcome.js +15 -57
- 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 +7 -18
- package/dist/api/promote.js +30 -152
- 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 +12 -13
- package/dist/api/remember.js +38 -27
- 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 +59 -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.d.ts +3 -0
- package/dist/capture/copilot-transcript.js +9 -2
- 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.d.ts +13 -0
- package/dist/capture/session-worker.js +196 -0
- 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 +265 -191
- package/dist/cli/setup.d.ts +2 -1
- package/dist/cli/setup.js +111 -45
- 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 +8 -3
- 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 -82
- 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 -48
- 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 -90
- 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} +16 -3
- package/dist/core/capture-contract.js +149 -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} +19 -5
- package/dist/{memory.js → core/memory.js} +117 -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.d.ts → core/prompt-recall.d.ts} +5 -0
- package/dist/{prompt-recall.js → core/prompt-recall.js} +14 -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 +48 -13
- package/dist/hooks/copilot.js +124 -39
- package/dist/{cli → hooks}/hook-blocks.js +1 -1
- package/dist/hooks/json-hooks.d.ts +3 -1
- package/dist/hooks/json-hooks.js +40 -122
- package/dist/hooks/opencode.js +35 -27
- package/dist/hooks/shared.d.ts +7 -5
- package/dist/hooks/shared.js +19 -8
- 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.d.ts +2 -2
- package/dist/mcp/memory-tools.js +12 -31
- 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 +65 -63
- 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 +21 -20
- 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} +3 -2
- 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 +41 -50
- package/dist/server.js +26 -560
- 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 +12 -6
- package/dist/store/audit-event.js +6 -5
- 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 +6 -3
- package/dist/store/handoffs.js +70 -31
- 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 +8 -4
- package/dist/store/open.js +34 -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} +5 -3
- package/dist/{raw-archive.js → store/raw-archive.js} +11 -5
- package/dist/{recall-scope.d.ts → store/recall-scope.d.ts} +4 -7
- package/dist/{recall-scope.js → store/recall-scope.js} +8 -9
- 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 +43 -36
- package/dist/store/sessions.d.ts +18 -2
- package/dist/store/sessions.js +83 -46
- 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/sqlite/entry-writes-group.js +170 -0
- 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} +17 -2
- package/dist/{env.js → util/env.js} +22 -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/capture-contract.js +0 -49
- 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-port.d.ts +0 -191
- package/dist/store-port.js +0 -166
- /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/{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,295 @@
|
|
|
1
|
+
// The built-in SQLite adapter behind the store port.
|
|
2
|
+
import { loadAmbientTallies } from '../ambient.js';
|
|
3
|
+
import { listApiKeyRows, readApiKeyRecord } from '../auth.js';
|
|
4
|
+
import { existsSync } from 'node:fs';
|
|
5
|
+
import { appendAuditEvent, listAuditEventsAfter, queryAuditEvents } from '../audit.js';
|
|
6
|
+
import { getHippoDbPath, withWriteScope } from '../../db/index.js';
|
|
7
|
+
import { loadStoredVectorViews } from '../embeddings/index.js';
|
|
8
|
+
import { activeGoalsWithPolicies, localGoalRecallRows, writeGoalRecallLog } from '../goals.js';
|
|
9
|
+
import { planningFallacyEvidenceAt } from '../planning-fallacy-evidence.js';
|
|
10
|
+
import { writeRecallTrace } from '../recall-trace.js';
|
|
11
|
+
import { recordTokenUse } from '../token-ledger.js';
|
|
12
|
+
import { loadAmbientCandidates, loadContextCandidates } from '../candidates.js';
|
|
13
|
+
import { loadEntriesByIds, loadFreshRawMemories } from '../entry-reads.js';
|
|
14
|
+
import { strengthenRetrievedInOwnTx } from '../entry-writes.js';
|
|
15
|
+
import { servedConnectorEvents, sqliteConnectorEvents } from './connector-events-group.js';
|
|
16
|
+
import { servedConnectorWrites, sqliteConnectorWrites } from './connector-writes-group.js';
|
|
17
|
+
import { sqliteDagReads } from './dag-reads-group.js';
|
|
18
|
+
import { sqliteEntryWrites } from './entry-writes-group.js';
|
|
19
|
+
import { servedGraphReads, sqliteGraphReads } from './graph-reads-group.js';
|
|
20
|
+
import { servedObjects, sqliteObjects } from './objects-group.js';
|
|
21
|
+
import { servedPredictions, sqlitePredictions } from './predictions-group.js';
|
|
22
|
+
import { servedQuarantine, sqliteQuarantine } from './quarantine-group.js';
|
|
23
|
+
import { sqliteVectorReads } from './vector-reads-group.js';
|
|
24
|
+
import { loadLatestHandoff } from '../handoffs.js';
|
|
25
|
+
import { updateStats } from '../index-and-stats.js';
|
|
26
|
+
import { auditHighIdAt, revokeKeyAt } from '../key-audit.js';
|
|
27
|
+
import { createKeyAt, createSelfKeyAt } from '../key-writes.js';
|
|
28
|
+
import { onHandle } from '../open.js';
|
|
29
|
+
import { loadRecallSearchEntries } from '../search-rows.js';
|
|
30
|
+
import { listSessionEvents, loadActiveTaskSnapshot } from '../sessions.js';
|
|
31
|
+
import { entriesWithoutVectorAt, writeVectorsAt } from '../vector-writes.js';
|
|
32
|
+
/** The store a request runs on: the served one, else hippo.db under its root, as the CLI and SDK callers have it. */
|
|
33
|
+
export function storeFor(ctx) {
|
|
34
|
+
return ctx.store ?? sqliteStore(ctx.hippoRoot);
|
|
35
|
+
}
|
|
36
|
+
/** The built-in store: hippo.db under the port's own method names, each call on its own short-lived handles, so close has nothing to release. */
|
|
37
|
+
export function sqliteSyncStore(hippoRoot) {
|
|
38
|
+
return {
|
|
39
|
+
kind: 'sqlite',
|
|
40
|
+
...sqliteBaseReads(hippoRoot),
|
|
41
|
+
...sqliteRecallWrites(hippoRoot),
|
|
42
|
+
keyAudit: sqliteKeyAudit(hippoRoot),
|
|
43
|
+
keyWrites: sqliteKeyWrites(hippoRoot),
|
|
44
|
+
vectorViews: sqliteVectorViews(hippoRoot),
|
|
45
|
+
vectorWrites: sqliteVectorWrites(hippoRoot),
|
|
46
|
+
entryWrites: sqliteEntryWrites(hippoRoot),
|
|
47
|
+
contextReads: sqliteContextReads(hippoRoot),
|
|
48
|
+
predictions: sqlitePredictions(hippoRoot),
|
|
49
|
+
dagReads: sqliteDagReads(hippoRoot),
|
|
50
|
+
auditLog: sqliteAuditLog(hippoRoot),
|
|
51
|
+
quarantine: sqliteQuarantine(hippoRoot),
|
|
52
|
+
graphReads: sqliteGraphReads(hippoRoot),
|
|
53
|
+
connectorWrites: sqliteConnectorWrites(hippoRoot),
|
|
54
|
+
connectorEvents: sqliteConnectorEvents(hippoRoot),
|
|
55
|
+
objects: sqliteObjects(hippoRoot),
|
|
56
|
+
readiness: sqliteReadiness(hippoRoot),
|
|
57
|
+
close() { },
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
function sqliteBaseReads(hippoRoot) {
|
|
61
|
+
return {
|
|
62
|
+
findApiKey(keyId) {
|
|
63
|
+
return onHandle(hippoRoot, (db) => readApiKeyRecord(db, keyId));
|
|
64
|
+
},
|
|
65
|
+
searchRecallEntries(query, args) {
|
|
66
|
+
return loadRecallSearchEntries(hippoRoot, query, args.limit, args.tenantId, args.requestedScope, args.explicitScopeMode, args.includeSuperseded, args.originProjects, args.ownScope);
|
|
67
|
+
},
|
|
68
|
+
entriesByIds(ids, tenantId) {
|
|
69
|
+
return loadEntriesByIds(hippoRoot, ids, tenantId);
|
|
70
|
+
},
|
|
71
|
+
activeGoals(opts) {
|
|
72
|
+
return activeGoalsWithPolicies(hippoRoot, opts);
|
|
73
|
+
},
|
|
74
|
+
freshRawEntries(count, tenantId, sessionId, origins) {
|
|
75
|
+
return loadFreshRawMemories(hippoRoot, count, tenantId, sessionId, origins ?? undefined);
|
|
76
|
+
},
|
|
77
|
+
continuity(tenantId, eventLimit, key) {
|
|
78
|
+
return continuityAt(hippoRoot, tenantId, eventLimit, key);
|
|
79
|
+
},
|
|
80
|
+
planningFallacyEvidence(tenantId, classQueryTokens) {
|
|
81
|
+
return planningFallacyEvidenceAt(hippoRoot, tenantId, classQueryTokens);
|
|
82
|
+
},
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
function sqliteRecallWrites(hippoRoot) {
|
|
86
|
+
return {
|
|
87
|
+
appendAuditEvents(events) {
|
|
88
|
+
if (events.length === 0)
|
|
89
|
+
return;
|
|
90
|
+
onHandle(hippoRoot, (db) => withWriteScope(db, 'append_audit_events', () => {
|
|
91
|
+
for (const event of events)
|
|
92
|
+
appendAuditEvent(db, event);
|
|
93
|
+
}));
|
|
94
|
+
},
|
|
95
|
+
finishRecall(writes) {
|
|
96
|
+
finishRecallAt(hippoRoot, writes);
|
|
97
|
+
},
|
|
98
|
+
bumpRecallStats(recalled) {
|
|
99
|
+
updateStats(hippoRoot, { recalled });
|
|
100
|
+
},
|
|
101
|
+
recordTokens(use) {
|
|
102
|
+
onHandle(hippoRoot, (db) => recordTokenUse(db, use));
|
|
103
|
+
},
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
function sqliteVectorViews(hippoRoot) {
|
|
107
|
+
return {
|
|
108
|
+
storedVectorViews(ids) {
|
|
109
|
+
return loadStoredVectorViews(hippoRoot, ids);
|
|
110
|
+
},
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
function sqliteVectorWrites(hippoRoot) {
|
|
114
|
+
return {
|
|
115
|
+
entriesWithoutVector(query) {
|
|
116
|
+
return onHandle(hippoRoot, (db) => entriesWithoutVectorAt(db, query));
|
|
117
|
+
},
|
|
118
|
+
writeVectors(write) {
|
|
119
|
+
return onHandle(hippoRoot, (db) => writeVectorsAt(db, write));
|
|
120
|
+
},
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
function sqliteAuditLog(hippoRoot) {
|
|
124
|
+
return {
|
|
125
|
+
listAuditEvents(query) {
|
|
126
|
+
return onHandle(hippoRoot, (db) => queryAuditEvents(db, query));
|
|
127
|
+
},
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
function sqliteReadiness(hippoRoot) {
|
|
131
|
+
return {
|
|
132
|
+
ping() {
|
|
133
|
+
// A probe must not create the store; the first write does, so a root with none yet is ready.
|
|
134
|
+
if (!existsSync(getHippoDbPath(hippoRoot)))
|
|
135
|
+
return;
|
|
136
|
+
onHandle(hippoRoot, (db) => { db.prepare('SELECT 1').get(); });
|
|
137
|
+
},
|
|
138
|
+
};
|
|
139
|
+
}
|
|
140
|
+
/** `sqliteSyncStore` as a served store: each method runs at once and answers through a Promise, so a throw rejects as another store's would. */
|
|
141
|
+
export function sqliteStore(hippoRoot) {
|
|
142
|
+
const sync = sqliteSyncStore(hippoRoot);
|
|
143
|
+
return {
|
|
144
|
+
...servedBaseMethods(sync),
|
|
145
|
+
vectors: sqliteVectorReads(hippoRoot),
|
|
146
|
+
vectorViews: { storedVectorViews: async (ids) => sync.vectorViews.storedVectorViews(ids) },
|
|
147
|
+
...servedKeyGroups(sync),
|
|
148
|
+
...servedEntryGroups(sync),
|
|
149
|
+
predictions: servedPredictions(sync.predictions),
|
|
150
|
+
...servedDagAndAudit(sync),
|
|
151
|
+
quarantine: servedQuarantine(sync.quarantine),
|
|
152
|
+
graphReads: servedGraphReads(sync.graphReads),
|
|
153
|
+
connectorWrites: servedConnectorWrites(sync.connectorWrites),
|
|
154
|
+
connectorEvents: servedConnectorEvents(sync.connectorEvents),
|
|
155
|
+
objects: servedObjects(sqliteObjects(hippoRoot)),
|
|
156
|
+
readiness: { ping: async () => sync.readiness.ping() },
|
|
157
|
+
close: async () => sync.close(),
|
|
158
|
+
};
|
|
159
|
+
}
|
|
160
|
+
function servedBaseMethods(sync) {
|
|
161
|
+
return {
|
|
162
|
+
kind: sync.kind,
|
|
163
|
+
findApiKey: async (keyId) => sync.findApiKey(keyId),
|
|
164
|
+
searchRecallEntries: async (query, args) => sync.searchRecallEntries(query, args),
|
|
165
|
+
entriesByIds: async (ids, tenantId) => sync.entriesByIds(ids, tenantId),
|
|
166
|
+
activeGoals: async (opts) => sync.activeGoals(opts),
|
|
167
|
+
freshRawEntries: async (count, tenantId, sessionId, origins) => sync.freshRawEntries(count, tenantId, sessionId, origins),
|
|
168
|
+
continuity: async (tenantId, eventLimit, key) => sync.continuity(tenantId, eventLimit, key),
|
|
169
|
+
planningFallacyEvidence: async (tenantId, classQueryTokens) => sync.planningFallacyEvidence(tenantId, classQueryTokens),
|
|
170
|
+
appendAuditEvents: async (events) => sync.appendAuditEvents(events),
|
|
171
|
+
finishRecall: async (writes) => sync.finishRecall(writes),
|
|
172
|
+
bumpRecallStats: async (recalled) => sync.bumpRecallStats(recalled),
|
|
173
|
+
recordTokens: async (use) => sync.recordTokens(use),
|
|
174
|
+
};
|
|
175
|
+
}
|
|
176
|
+
function servedKeyGroups(sync) {
|
|
177
|
+
const { keyAudit, keyWrites } = sync;
|
|
178
|
+
return {
|
|
179
|
+
keyAudit: {
|
|
180
|
+
revokeApiKey: async (revoke) => keyAudit.revokeApiKey(revoke),
|
|
181
|
+
auditEventsAfter: async (opts) => keyAudit.auditEventsAfter(opts),
|
|
182
|
+
auditHighId: async () => keyAudit.auditHighId(),
|
|
183
|
+
},
|
|
184
|
+
keyWrites: {
|
|
185
|
+
createApiKey: async (mint) => keyWrites.createApiKey(mint),
|
|
186
|
+
createSelfApiKey: async (mint) => keyWrites.createSelfApiKey(mint),
|
|
187
|
+
listApiKeys: async (query) => keyWrites.listApiKeys(query),
|
|
188
|
+
},
|
|
189
|
+
};
|
|
190
|
+
}
|
|
191
|
+
function servedEntryGroups(sync) {
|
|
192
|
+
const { vectorWrites, entryWrites, contextReads } = sync;
|
|
193
|
+
return {
|
|
194
|
+
vectorWrites: {
|
|
195
|
+
entriesWithoutVector: async (query) => vectorWrites.entriesWithoutVector(query),
|
|
196
|
+
writeVectors: async (write) => vectorWrites.writeVectors(write),
|
|
197
|
+
},
|
|
198
|
+
entryWrites: {
|
|
199
|
+
writeEntry: async (write) => entryWrites.writeEntry(write),
|
|
200
|
+
applyOutcome: async (outcome) => entryWrites.applyOutcome(outcome),
|
|
201
|
+
supersede: async (write) => entryWrites.supersede(write),
|
|
202
|
+
archiveRaw: async (archive) => entryWrites.archiveRaw(archive),
|
|
203
|
+
forget: async (removal) => entryWrites.forget(removal),
|
|
204
|
+
},
|
|
205
|
+
contextReads: {
|
|
206
|
+
unfinishedHandoff: async (tenantId, maxAgeMs, key) => contextReads.unfinishedHandoff(tenantId, maxAgeMs, key),
|
|
207
|
+
ambientCandidates: async (tenantId, request) => contextReads.ambientCandidates(tenantId, request),
|
|
208
|
+
contextCandidates: async (tenantId, filter) => contextReads.contextCandidates(tenantId, filter),
|
|
209
|
+
ambientTallies: async (tenantId, filter) => contextReads.ambientTallies(tenantId, filter),
|
|
210
|
+
},
|
|
211
|
+
};
|
|
212
|
+
}
|
|
213
|
+
function servedDagAndAudit(sync) {
|
|
214
|
+
const { dagReads, auditLog } = sync;
|
|
215
|
+
return {
|
|
216
|
+
dagReads: {
|
|
217
|
+
sessionRawEntries: async (query) => dagReads.sessionRawEntries(query),
|
|
218
|
+
sessionRawCount: async (query) => dagReads.sessionRawCount(query),
|
|
219
|
+
summaryWithDescendants: async (tenantId, id, walk) => dagReads.summaryWithDescendants(tenantId, id, walk),
|
|
220
|
+
},
|
|
221
|
+
auditLog: {
|
|
222
|
+
listAuditEvents: async (query) => auditLog.listAuditEvents(query),
|
|
223
|
+
},
|
|
224
|
+
};
|
|
225
|
+
}
|
|
226
|
+
function sqliteContextReads(hippoRoot) {
|
|
227
|
+
return {
|
|
228
|
+
unfinishedHandoff(tenantId, maxAgeMs, key) {
|
|
229
|
+
return loadLatestHandoff(hippoRoot, tenantId, undefined, { unfinishedOnly: true, maxAgeMs, scopeFilter: 'default-deny' }, key ?? undefined);
|
|
230
|
+
},
|
|
231
|
+
ambientCandidates(tenantId, { recentNeeded, admit, recall, origins }) {
|
|
232
|
+
return loadAmbientCandidates(hippoRoot, tenantId, recentNeeded, admit, recall, origins);
|
|
233
|
+
},
|
|
234
|
+
contextCandidates(tenantId, filter) {
|
|
235
|
+
return loadContextCandidates(hippoRoot, tenantId, filter);
|
|
236
|
+
},
|
|
237
|
+
ambientTallies(tenantId, filter) {
|
|
238
|
+
return loadAmbientTallies(hippoRoot, tenantId, filter);
|
|
239
|
+
},
|
|
240
|
+
};
|
|
241
|
+
}
|
|
242
|
+
function sqliteKeyWrites(hippoRoot) {
|
|
243
|
+
return {
|
|
244
|
+
createApiKey(mint) {
|
|
245
|
+
onHandle(hippoRoot, (db) => createKeyAt(db, mint));
|
|
246
|
+
},
|
|
247
|
+
createSelfApiKey(mint) {
|
|
248
|
+
return onHandle(hippoRoot, (db) => createSelfKeyAt(db, mint));
|
|
249
|
+
},
|
|
250
|
+
listApiKeys(query) {
|
|
251
|
+
return onHandle(hippoRoot, (db) => listApiKeyRows(db, query));
|
|
252
|
+
},
|
|
253
|
+
};
|
|
254
|
+
}
|
|
255
|
+
function sqliteKeyAudit(hippoRoot) {
|
|
256
|
+
return {
|
|
257
|
+
revokeApiKey(revoke) {
|
|
258
|
+
return onHandle(hippoRoot, (db) => revokeKeyAt(db, revoke));
|
|
259
|
+
},
|
|
260
|
+
auditEventsAfter(opts) {
|
|
261
|
+
return onHandle(hippoRoot, (db) => listAuditEventsAfter(db, opts));
|
|
262
|
+
},
|
|
263
|
+
auditHighId() {
|
|
264
|
+
return onHandle(hippoRoot, auditHighIdAt);
|
|
265
|
+
},
|
|
266
|
+
};
|
|
267
|
+
}
|
|
268
|
+
/** sqliteStore's continuity read, for the synchronous recall that cannot await the port. */
|
|
269
|
+
export function continuityAt(hippoRoot, tenantId, eventLimit, key) {
|
|
270
|
+
const activeSnapshot = loadActiveTaskSnapshot(hippoRoot, tenantId, key ?? undefined);
|
|
271
|
+
const sessionId = activeSnapshot?.session_id ?? undefined;
|
|
272
|
+
return {
|
|
273
|
+
activeSnapshot,
|
|
274
|
+
sessionHandoff: sessionId ? loadLatestHandoff(hippoRoot, tenantId, sessionId, {}, key ?? undefined) : null,
|
|
275
|
+
recentSessionEvents: sessionId ? listSessionEvents(hippoRoot, tenantId, { session_id: sessionId, limit: eventLimit }) : [],
|
|
276
|
+
};
|
|
277
|
+
}
|
|
278
|
+
/** sqliteStore's finishRecall, for the synchronous recall that cannot await the port. */
|
|
279
|
+
export function finishRecallAt(hippoRoot, writes) {
|
|
280
|
+
return onHandle(hippoRoot, (db) => {
|
|
281
|
+
// With no row to write the scope would only take the write lock.
|
|
282
|
+
if (writes.goalLog.length > 0 || writes.audit.length > 0) {
|
|
283
|
+
withWriteScope(db, 'finish_recall', () => {
|
|
284
|
+
writeGoalRecallLog(db, localGoalRecallRows(db, writes.goalLog));
|
|
285
|
+
for (const event of writes.audit)
|
|
286
|
+
appendAuditEvent(db, event);
|
|
287
|
+
});
|
|
288
|
+
}
|
|
289
|
+
// Each opens its own transaction, so neither can share the scope above.
|
|
290
|
+
const traceId = writes.trace ? writeRecallTrace(db, writes.trace) : null;
|
|
291
|
+
const strengthened = writes.strengthen ? strengthenRetrievedInOwnTx(db, writes.strengthen.ids, writes.strengthen.opts) : new Set();
|
|
292
|
+
return { traceId, strengthened };
|
|
293
|
+
});
|
|
294
|
+
}
|
|
295
|
+
//# sourceMappingURL=store.js.map
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/** Every vector end to end in `buffer` as Float32, `dims[i]` numbers for `ids[i]`. */
|
|
2
|
+
export interface VectorPack {
|
|
3
|
+
readonly ids: readonly string[];
|
|
4
|
+
readonly dims: readonly number[];
|
|
5
|
+
readonly buffer: ArrayBuffer;
|
|
6
|
+
}
|
|
7
|
+
/** A pack on the thread that built it, so the reply that carries it knows which buffer to move. */
|
|
8
|
+
export declare class PackedVectors implements VectorPack {
|
|
9
|
+
readonly ids: readonly string[];
|
|
10
|
+
readonly dims: readonly number[];
|
|
11
|
+
readonly buffer: ArrayBuffer;
|
|
12
|
+
constructor(ids: readonly string[], dims: readonly number[], buffer: ArrayBuffer);
|
|
13
|
+
}
|
|
14
|
+
export declare function packVectors(vectors: ReadonlyMap<string, Float32Array>): PackedVectors;
|
|
15
|
+
/** Each value views its own stretch of the pack's one buffer. */
|
|
16
|
+
export declare function vectorViewsOf(pack: VectorPack): Map<string, Float32Array>;
|
|
17
|
+
export declare function vectorCopiesOf(pack: VectorPack): Map<string, number[]>;
|
|
18
|
+
//# sourceMappingURL=vector-pack.d.ts.map
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
// Vectors from a store worker as one buffer: it moves to the server thread with no copy, where a Map of typed arrays is copied value by value.
|
|
2
|
+
/** A pack on the thread that built it, so the reply that carries it knows which buffer to move. */
|
|
3
|
+
export class PackedVectors {
|
|
4
|
+
ids;
|
|
5
|
+
dims;
|
|
6
|
+
buffer;
|
|
7
|
+
constructor(ids, dims, buffer) {
|
|
8
|
+
this.ids = ids;
|
|
9
|
+
this.dims = dims;
|
|
10
|
+
this.buffer = buffer;
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
export function packVectors(vectors) {
|
|
14
|
+
let total = 0;
|
|
15
|
+
for (const vector of vectors.values())
|
|
16
|
+
total += vector.length;
|
|
17
|
+
const buffer = new ArrayBuffer(total * Float32Array.BYTES_PER_ELEMENT);
|
|
18
|
+
const floats = new Float32Array(buffer);
|
|
19
|
+
const dims = [];
|
|
20
|
+
let at = 0;
|
|
21
|
+
for (const vector of vectors.values()) {
|
|
22
|
+
floats.set(vector, at);
|
|
23
|
+
at += vector.length;
|
|
24
|
+
dims.push(vector.length);
|
|
25
|
+
}
|
|
26
|
+
return new PackedVectors([...vectors.keys()], dims, buffer);
|
|
27
|
+
}
|
|
28
|
+
function eachVector(pack, valueOf) {
|
|
29
|
+
const floats = new Float32Array(pack.buffer);
|
|
30
|
+
const out = new Map();
|
|
31
|
+
let at = 0;
|
|
32
|
+
pack.ids.forEach((id, i) => {
|
|
33
|
+
const end = at + (pack.dims[i] ?? 0);
|
|
34
|
+
out.set(id, valueOf(floats.subarray(at, end)));
|
|
35
|
+
at = end;
|
|
36
|
+
});
|
|
37
|
+
return out;
|
|
38
|
+
}
|
|
39
|
+
/** Each value views its own stretch of the pack's one buffer. */
|
|
40
|
+
export function vectorViewsOf(pack) {
|
|
41
|
+
return eachVector(pack, (view) => view);
|
|
42
|
+
}
|
|
43
|
+
export function vectorCopiesOf(pack) {
|
|
44
|
+
return eachVector(pack, (view) => Array.from(view));
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=vector-pack.js.map
|
|
@@ -0,0 +1,23 @@
|
|
|
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
|
+
import { loadPhysicsState } from '../../db/physics-state.js';
|
|
3
|
+
import { embeddingIndexStateAt, loadStoredVectors } from '../embeddings/index.js';
|
|
4
|
+
import { onHandle } from '../open.js';
|
|
5
|
+
import { loadVectorCandidateEntries } from '../search-rows.js';
|
|
6
|
+
export function sqliteVectorReads(hippoRoot) {
|
|
7
|
+
return {
|
|
8
|
+
async embeddingIndexState() {
|
|
9
|
+
return embeddingIndexStateAt(hippoRoot);
|
|
10
|
+
},
|
|
11
|
+
async storedVectors(ids) {
|
|
12
|
+
return loadStoredVectors(hippoRoot, ids);
|
|
13
|
+
},
|
|
14
|
+
async nearestEntries(queryVector, spec) {
|
|
15
|
+
return loadVectorCandidateEntries(hippoRoot, queryVector, spec);
|
|
16
|
+
},
|
|
17
|
+
async physicsParticles(ids) {
|
|
18
|
+
// loadPhysicsState reads every row for an empty list.
|
|
19
|
+
return ids.length === 0 ? new Map() : onHandle(hippoRoot, (db) => loadPhysicsState(db, [...ids]));
|
|
20
|
+
},
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=vector-reads-group.js.map
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
// Entry of a store worker thread; executor.ts starts it and nothing imports it. The work is in worker-jobs.ts.
|
|
2
|
+
import { parentPort, workerData } from 'node:worker_threads';
|
|
3
|
+
import { serveJobs } from './worker-jobs.js';
|
|
4
|
+
if (parentPort) {
|
|
5
|
+
// SAFETY: executor.ts is the only code that starts this file, and it passes a WorkerInit.
|
|
6
|
+
serveJobs(parentPort, workerData);
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=worker-entry.js.map
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { MessagePort } from 'node:worker_threads';
|
|
2
|
+
import { type WorkerInit } from './worker-ops.js';
|
|
3
|
+
/** Answers the thread's jobs until 'stop', which closes the connection so the thread ends with no handle on the store's files. */
|
|
4
|
+
export declare function serveJobs(port: MessagePort, init: WorkerInit): void;
|
|
5
|
+
//# sourceMappingURL=worker-jobs.d.ts.map
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
import { auditWriteFailureCount } from '../audit.js';
|
|
2
|
+
import { RequestStores } from '../../db/index.js';
|
|
3
|
+
import { loadStoredVectorViews } from '../embeddings/index.js';
|
|
4
|
+
import { requestScopes } from '../../util/request-scope.js';
|
|
5
|
+
import { initStore } from '../open.js';
|
|
6
|
+
import { watchCommits } from './commit-watch.js';
|
|
7
|
+
import { encodeError } from './error-codec.js';
|
|
8
|
+
import { sqliteSyncStore } from './store.js';
|
|
9
|
+
import { PackedVectors, packVectors } from './vector-pack.js';
|
|
10
|
+
import { sqliteVectorReads } from './vector-reads-group.js';
|
|
11
|
+
import { STORE_SETUP_OP, WORKER_OPS } from './worker-ops.js';
|
|
12
|
+
/** Every method the op table can name: the synchronous store, and the vector reads, which answer only through Promises.
|
|
13
|
+
* The two reads that return vectors answer with a pack, which worker-store.ts turns back into the port's Map. */
|
|
14
|
+
function workerOps(hippoRoot) {
|
|
15
|
+
const packed = (ids) => packVectors(loadStoredVectorViews(hippoRoot, ids));
|
|
16
|
+
return {
|
|
17
|
+
...sqliteSyncStore(hippoRoot),
|
|
18
|
+
vectors: { ...sqliteVectorReads(hippoRoot), storedVectors: packed },
|
|
19
|
+
vectorViews: { storedVectorViews: packed },
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
/** The scope every job of a thread runs in, so each open inside a job gets the thread's one connection. */
|
|
23
|
+
class WorkerStores extends RequestStores {
|
|
24
|
+
requestId = undefined;
|
|
25
|
+
walPages;
|
|
26
|
+
jobId = 0;
|
|
27
|
+
#init;
|
|
28
|
+
#commitFlag;
|
|
29
|
+
#prepared = new WeakSet();
|
|
30
|
+
#walPagesOn = new WeakMap();
|
|
31
|
+
constructor(init) {
|
|
32
|
+
// The executor sends a reader its first job only after the writer has run the setup.
|
|
33
|
+
super({ busyWaitMs: init.busyWaitMs, ...(init.mode === 'read' && { setupDoneFor: init.hippoRoot }) });
|
|
34
|
+
this.#init = init;
|
|
35
|
+
this.#commitFlag = init.commitFlag && new Int32Array(init.commitFlag);
|
|
36
|
+
}
|
|
37
|
+
// The one path every open of the scope takes: `get` is a wrapper over it.
|
|
38
|
+
getWithFacts(hippoRoot, opts) {
|
|
39
|
+
const opened = super.getWithFacts(hippoRoot, opts);
|
|
40
|
+
const { db } = opened;
|
|
41
|
+
if (!this.#prepared.has(db)) {
|
|
42
|
+
this.#prepared.add(db);
|
|
43
|
+
// A reader that could write would let a method wrongly tagged 'read' take the write lock off the writer thread.
|
|
44
|
+
if (this.#init.mode === 'read')
|
|
45
|
+
db.exec('PRAGMA query_only = ON');
|
|
46
|
+
const flag = this.#commitFlag;
|
|
47
|
+
if (flag)
|
|
48
|
+
watchCommits(db, () => Atomics.store(flag, 0, this.jobId));
|
|
49
|
+
}
|
|
50
|
+
// The connection set its own value from this thread's state, where no checkpointer ever runs.
|
|
51
|
+
if (hippoRoot === this.#init.hippoRoot && this.walPages !== undefined && this.#walPagesOn.get(db) !== this.walPages) {
|
|
52
|
+
db.exec(`PRAGMA wal_autocheckpoint = ${this.walPages}`);
|
|
53
|
+
this.#walPagesOn.set(db, this.walPages);
|
|
54
|
+
}
|
|
55
|
+
return opened;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
function isWorkerGroup(group) {
|
|
59
|
+
return Object.hasOwn(WORKER_OPS, group);
|
|
60
|
+
}
|
|
61
|
+
function runsOnWorker(group, method) {
|
|
62
|
+
const places = WORKER_OPS[group];
|
|
63
|
+
return Object.hasOwn(places, method) && places[method] !== 'server';
|
|
64
|
+
}
|
|
65
|
+
function methodsOf(ops, group) {
|
|
66
|
+
// SAFETY: every group is an object of methods, and the server thread sent the arguments the port's own signature for the one called took.
|
|
67
|
+
return (group === 'base' ? ops : ops[group]);
|
|
68
|
+
}
|
|
69
|
+
/** Runs `op`; only a method the op table places on a worker can run. */
|
|
70
|
+
function runOp(ops, op, args) {
|
|
71
|
+
const [group = '', method = ''] = op.split('.');
|
|
72
|
+
const run = isWorkerGroup(group) && runsOnWorker(group, method) ? methodsOf(ops, group)[method] : undefined;
|
|
73
|
+
if (run === undefined)
|
|
74
|
+
throw new Error(`the store worker has no op '${op}'`);
|
|
75
|
+
return run(...args);
|
|
76
|
+
}
|
|
77
|
+
async function answer(ops, stores, hippoRoot, job) {
|
|
78
|
+
const failuresBefore = auditWriteFailureCount();
|
|
79
|
+
stores.requestId = job.requestId;
|
|
80
|
+
stores.walPages = job.walPages;
|
|
81
|
+
stores.jobId = job.id;
|
|
82
|
+
try {
|
|
83
|
+
const value = await requestScopes.run(stores, () => (job.op === STORE_SETUP_OP ? initStore(hippoRoot) : runOp(ops, job.op, job.args)));
|
|
84
|
+
return { id: job.id, ok: true, value, auditFailures: auditWriteFailureCount() - failuresBefore };
|
|
85
|
+
}
|
|
86
|
+
catch (err) {
|
|
87
|
+
return { id: job.id, ok: false, error: encodeError(err), auditFailures: auditWriteFailureCount() - failuresBefore };
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
function post(port, reply) {
|
|
91
|
+
try {
|
|
92
|
+
port.postMessage(reply, reply.ok && reply.value instanceof PackedVectors ? [reply.value.buffer] : []);
|
|
93
|
+
}
|
|
94
|
+
catch (err) {
|
|
95
|
+
// A result that cannot be copied to the server thread must still answer, or its caller would wait for ever.
|
|
96
|
+
port.postMessage({ id: reply.id, ok: false, error: encodeError(err), auditFailures: reply.auditFailures });
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
/** Answers the thread's jobs until 'stop', which closes the connection so the thread ends with no handle on the store's files. */
|
|
100
|
+
export function serveJobs(port, init) {
|
|
101
|
+
const ops = workerOps(init.hippoRoot);
|
|
102
|
+
const stores = new WorkerStores(init);
|
|
103
|
+
// A thread is sent one job at a time, so only 'stop' can arrive while a vector scan yields, and it waits for that job's reply.
|
|
104
|
+
let last = Promise.resolve();
|
|
105
|
+
port.on('message', (message) => {
|
|
106
|
+
if (message === 'stop') {
|
|
107
|
+
void last.then(() => {
|
|
108
|
+
stores.close();
|
|
109
|
+
port.close();
|
|
110
|
+
});
|
|
111
|
+
return;
|
|
112
|
+
}
|
|
113
|
+
last = answer(ops, stores, init.hippoRoot, message).then((reply) => post(port, reply));
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
//# sourceMappingURL=worker-jobs.js.map
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
import type { HippoStore } from '../port.js';
|
|
2
|
+
import type { WireError } from './error-codec.js';
|
|
3
|
+
/** 'write' runs on the one writer thread; 'read' on a reader, whose connection refuses every write. */
|
|
4
|
+
export type OpMode = 'read' | 'write';
|
|
5
|
+
/** 'server' keeps a method on the calling thread: it takes a function, and a function cannot be copied to a thread. */
|
|
6
|
+
export type OpPlace = OpMode | 'server';
|
|
7
|
+
export type OpPlaces<G> = {
|
|
8
|
+
readonly [M in keyof G]: OpPlace;
|
|
9
|
+
};
|
|
10
|
+
/** The store methods that answer from a worker, the base ones under `base`. Tagged by effect, not by name: predictionBaserate appends an audit row and
|
|
11
|
+
* bumpRecallStats rewrites stats.json, so both are writes. A read that opens through `openStore` is a read: the writer runs that open's setup before any reader serves. */
|
|
12
|
+
export declare const WORKER_OPS: {
|
|
13
|
+
readonly base: {
|
|
14
|
+
readonly findApiKey: "read";
|
|
15
|
+
readonly searchRecallEntries: "read";
|
|
16
|
+
readonly entriesByIds: "read";
|
|
17
|
+
readonly activeGoals: "read";
|
|
18
|
+
readonly freshRawEntries: "read";
|
|
19
|
+
readonly continuity: "read";
|
|
20
|
+
readonly planningFallacyEvidence: "read";
|
|
21
|
+
readonly appendAuditEvents: "write";
|
|
22
|
+
readonly finishRecall: "write";
|
|
23
|
+
readonly bumpRecallStats: "write";
|
|
24
|
+
readonly recordTokens: "write";
|
|
25
|
+
};
|
|
26
|
+
readonly vectors: {
|
|
27
|
+
readonly embeddingIndexState: "read";
|
|
28
|
+
readonly storedVectors: "read";
|
|
29
|
+
readonly nearestEntries: "read";
|
|
30
|
+
readonly physicsParticles: "read";
|
|
31
|
+
};
|
|
32
|
+
readonly vectorViews: {
|
|
33
|
+
readonly storedVectorViews: "read";
|
|
34
|
+
};
|
|
35
|
+
readonly keyAudit: {
|
|
36
|
+
readonly revokeApiKey: "write";
|
|
37
|
+
readonly auditEventsAfter: "read";
|
|
38
|
+
readonly auditHighId: "read";
|
|
39
|
+
};
|
|
40
|
+
readonly keyWrites: {
|
|
41
|
+
readonly createApiKey: "write";
|
|
42
|
+
readonly createSelfApiKey: "write";
|
|
43
|
+
readonly listApiKeys: "read";
|
|
44
|
+
};
|
|
45
|
+
readonly vectorWrites: {
|
|
46
|
+
readonly entriesWithoutVector: "read";
|
|
47
|
+
readonly writeVectors: "write";
|
|
48
|
+
};
|
|
49
|
+
readonly entryWrites: {
|
|
50
|
+
readonly writeEntry: "write";
|
|
51
|
+
readonly applyOutcome: "write";
|
|
52
|
+
readonly supersede: "write";
|
|
53
|
+
readonly archiveRaw: "write";
|
|
54
|
+
readonly forget: "write";
|
|
55
|
+
};
|
|
56
|
+
readonly contextReads: {
|
|
57
|
+
readonly unfinishedHandoff: "read";
|
|
58
|
+
readonly ambientCandidates: "server";
|
|
59
|
+
readonly contextCandidates: "read";
|
|
60
|
+
readonly ambientTallies: "read";
|
|
61
|
+
};
|
|
62
|
+
readonly predictions: {
|
|
63
|
+
readonly savePrediction: "write";
|
|
64
|
+
readonly closePrediction: "write";
|
|
65
|
+
readonly predictionById: "read";
|
|
66
|
+
readonly listPredictions: "read";
|
|
67
|
+
readonly predictionBaserate: "write";
|
|
68
|
+
};
|
|
69
|
+
readonly dagReads: {
|
|
70
|
+
readonly sessionRawEntries: "read";
|
|
71
|
+
readonly sessionRawCount: "read";
|
|
72
|
+
readonly summaryWithDescendants: "server";
|
|
73
|
+
};
|
|
74
|
+
readonly auditLog: {
|
|
75
|
+
readonly listAuditEvents: "read";
|
|
76
|
+
};
|
|
77
|
+
readonly quarantine: {
|
|
78
|
+
readonly listQuarantined: "read";
|
|
79
|
+
readonly approveQuarantined: "write";
|
|
80
|
+
readonly rejectQuarantined: "write";
|
|
81
|
+
};
|
|
82
|
+
readonly graphReads: {
|
|
83
|
+
readonly graphRows: "read";
|
|
84
|
+
};
|
|
85
|
+
readonly readiness: {
|
|
86
|
+
readonly ping: "read";
|
|
87
|
+
};
|
|
88
|
+
};
|
|
89
|
+
/** Sent by the executor itself and by no store method: the writer runs the store's open-time setup once, before any reader is sent a job. */
|
|
90
|
+
export declare const STORE_SETUP_OP = "setup";
|
|
91
|
+
export type WorkerGroup = keyof typeof WORKER_OPS;
|
|
92
|
+
/** The base methods the op table names. */
|
|
93
|
+
export type WorkerBase = Pick<HippoStore, keyof typeof WORKER_OPS.base>;
|
|
94
|
+
export interface WorkerInit {
|
|
95
|
+
readonly hippoRoot: string;
|
|
96
|
+
readonly mode: OpMode;
|
|
97
|
+
/** Lock wait of the thread's connection. */
|
|
98
|
+
readonly busyWaitMs: number;
|
|
99
|
+
/** One shared integer the writer sets to a job's id before that job may commit; the server thread reads it when the job passes its deadline. */
|
|
100
|
+
readonly commitFlag?: SharedArrayBuffer;
|
|
101
|
+
}
|
|
102
|
+
export interface Job {
|
|
103
|
+
readonly id: number;
|
|
104
|
+
/** `<group>.<method>` of the synchronous store, `base.<method>` for a base one. */
|
|
105
|
+
readonly op: string;
|
|
106
|
+
readonly args: readonly unknown[];
|
|
107
|
+
/** Of the request the call belongs to, so the thread's log lines carry it. */
|
|
108
|
+
readonly requestId: string | undefined;
|
|
109
|
+
/** wal_autocheckpoint as the server thread has it: a worker cannot see the checkpointer start or stop. */
|
|
110
|
+
readonly walPages: number;
|
|
111
|
+
}
|
|
112
|
+
/** Both kinds carry the audit rows the job failed to write, since the count `/health` reports lives on the server thread. */
|
|
113
|
+
export type Reply = {
|
|
114
|
+
readonly id: number;
|
|
115
|
+
readonly ok: true;
|
|
116
|
+
readonly value: unknown;
|
|
117
|
+
readonly auditFailures: number;
|
|
118
|
+
} | {
|
|
119
|
+
readonly id: number;
|
|
120
|
+
readonly ok: false;
|
|
121
|
+
readonly error: WireError;
|
|
122
|
+
readonly auditFailures: number;
|
|
123
|
+
};
|
|
124
|
+
//# sourceMappingURL=worker-ops.d.ts.map
|