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
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { type MemoryEntry } from '../memory.js';
|
|
2
|
-
import { type DatabaseSyncLike } from '../db.js';
|
|
1
|
+
import { type MemoryEntry } from '../core/memory.js';
|
|
2
|
+
import { type DatabaseSyncLike } from '../db/index.js';
|
|
3
3
|
export interface WriteEntryOptions {
|
|
4
4
|
actor?: string;
|
|
5
5
|
afterWrite?: (db: DatabaseSyncLike, memoryId: string) => void;
|
|
@@ -7,8 +7,12 @@ export interface WriteEntryOptions {
|
|
|
7
7
|
afterCommit?: () => void;
|
|
8
8
|
}
|
|
9
9
|
export declare function writeEntry(hippoRoot: string, entry: MemoryEntry, opts?: WriteEntryOptions): void;
|
|
10
|
-
/** writeEntry
|
|
11
|
-
export declare function
|
|
10
|
+
/** writeEntry for each of `entries` in one transaction, so all land or none; each keeps its audit row, and mirrors follow the commit. Returns how many were written. */
|
|
11
|
+
export declare function writeEntriesTogether(hippoRoot: string, entries: readonly MemoryEntry[]): number;
|
|
12
|
+
/** writeEntry for each of `entries` on one open store, so the open and its lock wait are paid once; each row commits alone, and none opens the store when the list is empty. */
|
|
13
|
+
export declare function writeEntriesSeparately(hippoRoot: string, entries: readonly MemoryEntry[]): void;
|
|
14
|
+
/** Adds `tag` to each of a tenant's rows that lacks it, in `ids` order, each read fresh on one open store and committed alone; an id the tenant does not hold is skipped. */
|
|
15
|
+
export declare function addTagToEntries(hippoRoot: string, tenantId: string, ids: readonly string[], tag: string): void;
|
|
12
16
|
/**
|
|
13
17
|
* DB-only write path. Caller owns the open `db` handle. Runs upsert +
|
|
14
18
|
* afterWrite hook + audit row inside one withWriteScope. Caller
|
|
@@ -26,6 +30,8 @@ export declare function writeEntryDbOnly(db: DatabaseSyncLike, entry: MemoryEntr
|
|
|
26
30
|
actor?: string;
|
|
27
31
|
afterWrite?: (db: DatabaseSyncLike, memoryId: string) => void;
|
|
28
32
|
}): void;
|
|
33
|
+
/** What follows a row's upsert inside its write scope: the remember row, last of the write's audit rows, then the summary parent's dirty mark. */
|
|
34
|
+
export declare function auditEntryWrite(db: DatabaseSyncLike, entry: MemoryEntry, actor: string): void;
|
|
29
35
|
/** Markdown mirror path, invoked AFTER commit (a rolled-back tx must leave no orphan markdown). */
|
|
30
36
|
export declare function writeEntryMirrors(hippoRoot: string, entry: MemoryEntry): void;
|
|
31
37
|
/** The caller passes the eval-only recall-boost ablation switch, so the store never reads experiment config itself. */
|
|
@@ -44,4 +50,27 @@ export declare function strengthenRetrievedOn(db: DatabaseSyncLike, ids: readonl
|
|
|
44
50
|
export declare function setEntryTagsInTx(db: DatabaseSyncLike, entry: MemoryEntry): void;
|
|
45
51
|
/** Removes a row from `memories` and full-text search on the caller's transaction, as sleep's dormant move does, and marks its summary parent dirty. */
|
|
46
52
|
export declare function deleteEntryRowInTx(db: DatabaseSyncLike, entry: MemoryEntry, actor: string): void;
|
|
53
|
+
/** One half-life per memory id, on the caller's transaction. */
|
|
54
|
+
export declare function setHalfLivesAt(db: DatabaseSyncLike, rows: readonly {
|
|
55
|
+
id: string;
|
|
56
|
+
halfLifeDays: number;
|
|
57
|
+
}[]): void;
|
|
58
|
+
/** Moves every row of `from` in a tenant to project `into`. */
|
|
59
|
+
export declare function restampOriginProjectAt(db: DatabaseSyncLike, tenantId: string, from: string, into: string): void;
|
|
60
|
+
/** Stamps each id with its project. */
|
|
61
|
+
export declare function stampOriginProjectsAt(db: DatabaseSyncLike, tenantId: string, rows: readonly {
|
|
62
|
+
id: string;
|
|
63
|
+
origin: string;
|
|
64
|
+
}[]): void;
|
|
65
|
+
/** Renames a live row's source from `from` to `to`; the count is 0 when another writer moved or superseded it first. */
|
|
66
|
+
export declare function renameEntrySourceAt(db: DatabaseSyncLike, tenantId: string, id: string, from: string, to: string): number;
|
|
67
|
+
export interface RenameSourceOptions {
|
|
68
|
+
readonly from: string;
|
|
69
|
+
readonly to: string;
|
|
70
|
+
readonly origin: string | null;
|
|
71
|
+
}
|
|
72
|
+
/** Renames a row's source and, when `origin` is not null, its project; the count is 0 when the row is gone or moved. */
|
|
73
|
+
export declare function renameEntrySourceAndOriginAt(db: DatabaseSyncLike, tenantId: string, id: string, options: RenameSourceOptions): number;
|
|
74
|
+
/** Marks `id` superseded by `newId`; false when another writer superseded it first. */
|
|
75
|
+
export declare function supersedeEntryAt(db: DatabaseSyncLike, tenantId: string, id: string, newId: string): boolean;
|
|
47
76
|
//# sourceMappingURL=entry-writes.d.ts.map
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import { markRetrieved } from '../memory.js';
|
|
2
|
-
import { closeHippoDb, openHippoDb, rethrowIfSqliteBlocked, withWriteScope } from '../db.js';
|
|
3
|
-
import { RejectedValueError } from '
|
|
4
|
-
import { markSummaryDirtyInTx } from '
|
|
5
|
-
import { log } from '../log.js';
|
|
6
|
-
import { MEMORY_SELECT_COLUMNS, rowToEntry } from './rows.js';
|
|
1
|
+
import { markRetrieved } from '../core/memory.js';
|
|
2
|
+
import { closeHippoDb, openHippoDb, rethrowIfSqliteBlocked, withWriteScope } from '../db/index.js';
|
|
3
|
+
import { RejectedValueError } from './rejection.js';
|
|
4
|
+
import { markSummaryDirtyInTx } from './summary-dirty.js';
|
|
5
|
+
import { errorMessage, log } from '../util/log.js';
|
|
7
6
|
import { auditRejectionRefusal, audit } from './audit-event.js';
|
|
7
|
+
import { selectEntriesByIds } from './entry-reads.js';
|
|
8
8
|
import { stampOriginProject, upsertEntryRow, syncFtsRow, deleteFtsRow } from './entry-row.js';
|
|
9
9
|
import { mirrorBestEffort, writeMarkdownMirror } from './mirrors.js';
|
|
10
10
|
import { openStore } from './open.js';
|
|
@@ -17,8 +17,60 @@ export function writeEntry(hippoRoot, entry, opts) {
|
|
|
17
17
|
closeHippoDb(db);
|
|
18
18
|
}
|
|
19
19
|
}
|
|
20
|
+
/** writeEntry for each of `entries` in one transaction, so all land or none; each keeps its audit row, and mirrors follow the commit. Returns how many were written. */
|
|
21
|
+
export function writeEntriesTogether(hippoRoot, entries) {
|
|
22
|
+
const stamped = entries.map((entry) => stampOriginProject(hippoRoot, entry));
|
|
23
|
+
const db = openStore(hippoRoot);
|
|
24
|
+
try {
|
|
25
|
+
withWriteScope(db, 'write_entries_together', () => {
|
|
26
|
+
for (const entry of stamped)
|
|
27
|
+
writeEntryDbOnly(db, entry);
|
|
28
|
+
});
|
|
29
|
+
for (const entry of stamped)
|
|
30
|
+
writeEntryMirrors(hippoRoot, entry);
|
|
31
|
+
}
|
|
32
|
+
catch (error) {
|
|
33
|
+
// The scope has unwound, so the refusal row outlives the rollback, as writeEntryOn's does.
|
|
34
|
+
if (error instanceof RejectedValueError)
|
|
35
|
+
auditRejectionRefusal(db, error, 'cli');
|
|
36
|
+
throw error;
|
|
37
|
+
}
|
|
38
|
+
finally {
|
|
39
|
+
closeHippoDb(db);
|
|
40
|
+
}
|
|
41
|
+
return stamped.length;
|
|
42
|
+
}
|
|
43
|
+
/** writeEntry for each of `entries` on one open store, so the open and its lock wait are paid once; each row commits alone, and none opens the store when the list is empty. */
|
|
44
|
+
export function writeEntriesSeparately(hippoRoot, entries) {
|
|
45
|
+
if (entries.length === 0)
|
|
46
|
+
return;
|
|
47
|
+
const db = openStore(hippoRoot);
|
|
48
|
+
try {
|
|
49
|
+
for (const entry of entries)
|
|
50
|
+
writeEntryOn(db, hippoRoot, entry);
|
|
51
|
+
}
|
|
52
|
+
finally {
|
|
53
|
+
closeHippoDb(db);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
/** Adds `tag` to each of a tenant's rows that lacks it, in `ids` order, each read fresh on one open store and committed alone; an id the tenant does not hold is skipped. */
|
|
57
|
+
export function addTagToEntries(hippoRoot, tenantId, ids, tag) {
|
|
58
|
+
const db = openStore(hippoRoot);
|
|
59
|
+
try {
|
|
60
|
+
const live = selectEntriesByIds(db, ids, tenantId);
|
|
61
|
+
for (const id of new Set(ids)) {
|
|
62
|
+
const entry = live.get(id);
|
|
63
|
+
if (!entry || entry.tags.includes(tag))
|
|
64
|
+
continue;
|
|
65
|
+
writeEntryOn(db, hippoRoot, { ...entry, tags: [...entry.tags, tag] });
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
finally {
|
|
69
|
+
closeHippoDb(db);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
20
72
|
/** writeEntry on the caller's open store, so a loop of writes opens the store once; each row still commits alone. */
|
|
21
|
-
|
|
73
|
+
function writeEntryOn(db, hippoRoot, entry, opts) {
|
|
22
74
|
try {
|
|
23
75
|
const stamped = stampOriginProject(hippoRoot, entry);
|
|
24
76
|
writeEntryDbOnly(db, stamped, opts);
|
|
@@ -55,16 +107,20 @@ export function writeEntryDbOnly(db, entry, opts) {
|
|
|
55
107
|
if (opts?.afterWrite) {
|
|
56
108
|
opts.afterWrite(db, entry.id);
|
|
57
109
|
}
|
|
58
|
-
|
|
110
|
+
auditEntryWrite(db, entry, opts?.actor ?? 'cli');
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
/** What follows a row's upsert inside its write scope: the remember row, last of the write's audit rows, then the summary parent's dirty mark. */
|
|
114
|
+
export function auditEntryWrite(db, entry, actor) {
|
|
115
|
+
audit(db, 'remember', { targetId: entry.id, metadata: {
|
|
59
116
|
kind: entry.kind ?? 'distilled',
|
|
60
117
|
scope: entry.scope ?? null,
|
|
61
|
-
},
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
});
|
|
118
|
+
}, actor, tenantId: entry.tenantId });
|
|
119
|
+
// A child write marks its summary parent dirty for the sleep-cycle rebuild; most writes
|
|
120
|
+
// have no parent, so the hot path pays one null check.
|
|
121
|
+
if (entry.dag_parent_id) {
|
|
122
|
+
markSummaryDirtyInTx(db, entry.dag_parent_id, entry.tenantId, actor);
|
|
123
|
+
}
|
|
68
124
|
}
|
|
69
125
|
/** Markdown mirror path, invoked AFTER commit (a rolled-back tx must leave no orphan markdown). */
|
|
70
126
|
export function writeEntryMirrors(hippoRoot, entry) {
|
|
@@ -104,23 +160,15 @@ export function strengthenRetrievedInOwnTx(db, ids, opts) {
|
|
|
104
160
|
}
|
|
105
161
|
}
|
|
106
162
|
function warnStrengthenFailed(error) {
|
|
107
|
-
log.warn(`retrieval stats not saved (${
|
|
163
|
+
log.warn(`retrieval stats not saved (${errorMessage(error)})`);
|
|
108
164
|
}
|
|
109
165
|
/** strengthenRetrieved on the caller's handle, inside the caller's transaction. Throws; the caller decides. */
|
|
110
166
|
export function strengthenRetrievedOn(db, ids, opts) {
|
|
111
167
|
const found = new Set();
|
|
112
168
|
if (ids.length === 0 || opts.recallBoostAblated)
|
|
113
169
|
return found;
|
|
114
|
-
const
|
|
115
|
-
const
|
|
116
|
-
const select = db.prepare(`SELECT ${MEMORY_SELECT_COLUMNS} FROM memories WHERE id = ?${tenantClause}`);
|
|
117
|
-
const live = [];
|
|
118
|
-
for (const id of ids) {
|
|
119
|
-
// SAFETY: the SELECT names exactly MEMORY_SELECT_COLUMNS, matching MemoryRow's field set.
|
|
120
|
-
const row = (tenantId !== undefined ? select.get(id, tenantId) : select.get(id));
|
|
121
|
-
if (row)
|
|
122
|
-
live.push(rowToEntry(row));
|
|
123
|
-
}
|
|
170
|
+
const byId = selectEntriesByIds(db, ids, opts.tenantId);
|
|
171
|
+
const live = [...new Set(ids)].flatMap((id) => byId.get(id) ?? []);
|
|
124
172
|
const update = db.prepare('UPDATE memories SET retrieval_count = ?, last_retrieved = ?, half_life_days = ?, strength = ? WHERE id = ?');
|
|
125
173
|
for (const e of markRetrieved(live)) {
|
|
126
174
|
update.run(e.retrieval_count, e.last_retrieved, e.half_life_days, e.strength, e.id);
|
|
@@ -141,4 +189,38 @@ export function deleteEntryRowInTx(db, entry, actor) {
|
|
|
141
189
|
if (entry.dag_parent_id)
|
|
142
190
|
markSummaryDirtyInTx(db, entry.dag_parent_id, entry.tenantId, actor);
|
|
143
191
|
}
|
|
192
|
+
/** One half-life per memory id, on the caller's transaction. */
|
|
193
|
+
export function setHalfLivesAt(db, rows) {
|
|
194
|
+
const update = db.prepare('UPDATE memories SET half_life_days = ? WHERE id = ?');
|
|
195
|
+
for (const r of rows)
|
|
196
|
+
update.run(r.halfLifeDays, r.id);
|
|
197
|
+
}
|
|
198
|
+
/** Moves every row of `from` in a tenant to project `into`. */
|
|
199
|
+
export function restampOriginProjectAt(db, tenantId, from, into) {
|
|
200
|
+
db.prepare(`UPDATE memories SET origin_project = ?, updated_at = datetime('now') WHERE tenant_id = ? AND origin_project = ?`)
|
|
201
|
+
.run(into, tenantId, from);
|
|
202
|
+
}
|
|
203
|
+
/** Stamps each id with its project. */
|
|
204
|
+
export function stampOriginProjectsAt(db, tenantId, rows) {
|
|
205
|
+
const stamp = db.prepare(`UPDATE memories SET origin_project = ?, updated_at = datetime('now') WHERE tenant_id = ? AND id = ?`);
|
|
206
|
+
for (const { id, origin } of rows)
|
|
207
|
+
stamp.run(origin, tenantId, id);
|
|
208
|
+
}
|
|
209
|
+
/** Renames a live row's source from `from` to `to`; the count is 0 when another writer moved or superseded it first. */
|
|
210
|
+
export function renameEntrySourceAt(db, tenantId, id, from, to) {
|
|
211
|
+
const moved = db.prepare(`UPDATE memories SET source = ? WHERE id = ? AND tenant_id = ? AND source = ? AND superseded_by IS NULL`).run(to, id, tenantId, from);
|
|
212
|
+
return Number(moved.changes ?? 0);
|
|
213
|
+
}
|
|
214
|
+
/** Renames a row's source and, when `origin` is not null, its project; the count is 0 when the row is gone or moved. */
|
|
215
|
+
export function renameEntrySourceAndOriginAt(db, tenantId, id, options) {
|
|
216
|
+
const { from, to, origin } = options;
|
|
217
|
+
const done = db.prepare(`UPDATE memories SET source = ?, origin_project = COALESCE(?, origin_project) WHERE id = ? AND tenant_id = ? AND source = ?`).run(to, origin, id, tenantId, from);
|
|
218
|
+
return Number(done.changes ?? 0);
|
|
219
|
+
}
|
|
220
|
+
/** Marks `id` superseded by `newId`; false when another writer superseded it first. */
|
|
221
|
+
export function supersedeEntryAt(db, tenantId, id, newId) {
|
|
222
|
+
const result = db.prepare(`UPDATE memories SET superseded_by = ? WHERE id = ? AND tenant_id = ? AND superseded_by IS NULL`)
|
|
223
|
+
.run(newId, id, tenantId);
|
|
224
|
+
return Number(result.changes ?? 0) !== 0;
|
|
225
|
+
}
|
|
144
226
|
//# sourceMappingURL=entry-writes.js.map
|
|
@@ -1,5 +1,8 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
|
|
1
|
+
import type { DatabaseSyncLike } from '../db/index.js';
|
|
2
|
+
/** Why a failure was not stored, or `stored`. */
|
|
3
|
+
export type CaptureErrorOutcome = 'stored' | 'duplicate' | 'skipped-interrupt' | 'skipped-routine' | 'skipped-invalid';
|
|
4
|
+
/** Which routine check skipped a failure; the log keeps it so declines can be told apart from empty searches. */
|
|
5
|
+
export type RoutineRule = 'declined' | 'os-permission' | 'no-match' | 'search-tool' | 'quiet-exit';
|
|
3
6
|
/** Rows older than this are pruned on write, which also bounds how far back a repeat can be found. */
|
|
4
7
|
export declare const FAILURE_LOG_RETENTION_DAYS = 90;
|
|
5
8
|
/** A capture-error outcome, or `store-failed` when storing the lesson threw. */
|
|
@@ -52,6 +55,8 @@ export interface FailureSummary {
|
|
|
52
55
|
repeats: number;
|
|
53
56
|
sessions: number;
|
|
54
57
|
}
|
|
58
|
+
/** Failed tool calls logged since `sinceIso`, in every tenant; throws when the table is missing. */
|
|
59
|
+
export declare function countFailuresSince(db: DatabaseSyncLike, sinceIso: string): number;
|
|
55
60
|
/** Sum the failure log for one tenant since `sinceIso`. */
|
|
56
61
|
export declare function summarizeFailures(db: DatabaseSyncLike, tenantId: string, sinceIso: string): FailureSummary;
|
|
57
62
|
//# sourceMappingURL=failure-log.d.ts.map
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
/** Failure log: every failed tool call the capture-error hook sees, stored or not. */
|
|
2
|
-
import { ConflictError } from '
|
|
2
|
+
import { ConflictError } from '../core/api-errors.js';
|
|
3
|
+
import { DAY_MS } from '../util/time.js';
|
|
3
4
|
/** Rows older than this are pruned on write, which also bounds how far back a repeat can be found. */
|
|
4
5
|
export const FAILURE_LOG_RETENTION_DAYS = 90;
|
|
5
6
|
/** Longest session id or tool name kept; the hook payload is not trusted to be short. */
|
|
@@ -10,7 +11,7 @@ export function recordFailure(db, event) {
|
|
|
10
11
|
const now = new Date(event.now ?? Date.now()).toISOString();
|
|
11
12
|
db.prepare(`INSERT INTO failure_log (ts, tenant_id, session_id, tool, outcome, skip_rule, sig_hash, detail_hash, owner_subject, origin_project, request_id)
|
|
12
13
|
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`).run(now, event.tenantId, event.sessionId?.slice(0, MAX_FIELD) ?? null, event.tool?.slice(0, MAX_FIELD) ?? null, event.outcome, event.rule ?? null, event.sigHash ?? null, event.detailHash ?? null, event.ownerSubject ?? null, event.originProject ?? null, event.requestId ?? null);
|
|
13
|
-
const cutoff = new Date(Date.parse(now) - FAILURE_LOG_RETENTION_DAYS *
|
|
14
|
+
const cutoff = new Date(Date.parse(now) - FAILURE_LOG_RETENTION_DAYS * DAY_MS).toISOString();
|
|
14
15
|
db.prepare(`DELETE FROM failure_log WHERE ts < ?`).run(cutoff);
|
|
15
16
|
}
|
|
16
17
|
/** The outcome logged for a caller's request id, or null, so a retried send finds the first one; another session's id is a ConflictError. */
|
|
@@ -49,6 +50,12 @@ export function failuresBySession(db, tenantId, sinceIso) {
|
|
|
49
50
|
}
|
|
50
51
|
return [...bySession.values()];
|
|
51
52
|
}
|
|
53
|
+
/** Failed tool calls logged since `sinceIso`, in every tenant; throws when the table is missing. */
|
|
54
|
+
export function countFailuresSince(db, sinceIso) {
|
|
55
|
+
// SAFETY: COUNT aggregate row.
|
|
56
|
+
const row = db.prepare(`SELECT COUNT(*) AS n FROM failure_log WHERE ts >= ?`).get(sinceIso);
|
|
57
|
+
return Number(row?.n ?? 0);
|
|
58
|
+
}
|
|
52
59
|
/** Sum the failure log for one tenant since `sinceIso`. */
|
|
53
60
|
export function summarizeFailures(db, tenantId, sinceIso) {
|
|
54
61
|
// SAFETY: the SELECT names exactly these two columns, TEXT and an aggregate.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { type DatabaseSyncLike } from '
|
|
2
|
-
import type { MemoryEntry } from '
|
|
3
|
-
import type { RerankStep } from '
|
|
1
|
+
import { type DatabaseSyncLike } from '../db/index.js';
|
|
2
|
+
import type { MemoryEntry } from '../core/memory.js';
|
|
3
|
+
import type { RerankStep } from '../core/search-types.js';
|
|
4
4
|
export type GoalStatus = 'active' | 'suspended' | 'completed';
|
|
5
5
|
export type PolicyType = 'schema-fit-biased' | 'error-prioritized' | 'recency-first' | 'hybrid';
|
|
6
6
|
export interface GoalRow {
|
|
@@ -40,8 +40,6 @@ export interface RetrievalPolicy {
|
|
|
40
40
|
weightOutcome: number;
|
|
41
41
|
errorPriority: number;
|
|
42
42
|
}
|
|
43
|
-
export declare const MAX_ACTIVE_GOAL_DEPTH = 3;
|
|
44
|
-
export declare const MAX_FINAL_MULTIPLIER = 3;
|
|
45
43
|
export declare function rowToGoal(row: GoalRow): Goal;
|
|
46
44
|
export interface PushGoalOpts {
|
|
47
45
|
sessionId: string;
|
|
@@ -59,19 +57,6 @@ export interface PushGoalOpts {
|
|
|
59
57
|
};
|
|
60
58
|
}
|
|
61
59
|
export declare function pushGoal(hippoRoot: string, opts: PushGoalOpts): Goal;
|
|
62
|
-
/**
|
|
63
|
-
* Depth-cap enforcer shared by pushGoalWithDb and resumeGoal.
|
|
64
|
-
* If the (tenant, session) has >= MAX_ACTIVE_GOAL_DEPTH active goals,
|
|
65
|
-
* suspend the oldest `overflow` ones.
|
|
66
|
-
*
|
|
67
|
-
* **Precondition: caller MUST already be inside a `BEGIN IMMEDIATE`
|
|
68
|
-
* transaction.** Helper does not open or commit -- name reflects this so it
|
|
69
|
-
* is impossible to misread the contract at a call site. Both existing call
|
|
70
|
-
* sites (pushGoalWithDb, resumeGoal) wrap in `BEGIN IMMEDIATE` already.
|
|
71
|
-
*
|
|
72
|
-
* @internal Internal goal-stack invariant. Subject to change.
|
|
73
|
-
*/
|
|
74
|
-
export declare function enforceDepthCapWithinTx(db: DatabaseSyncLike, tenantId: string, sessionId: string): void;
|
|
75
60
|
export declare function pushGoalWithDb(db: DatabaseSyncLike, opts: PushGoalOpts): Goal;
|
|
76
61
|
export interface GetActiveGoalsOpts {
|
|
77
62
|
sessionId: string;
|
|
@@ -87,7 +72,6 @@ export interface ActiveGoals {
|
|
|
87
72
|
export declare function activeGoalsWithPolicies(hippoRoot: string, opts: GetActiveGoalsOpts): ActiveGoals;
|
|
88
73
|
/** Every goal of a (tenant, session), whatever its status, oldest first. */
|
|
89
74
|
export declare function getSessionGoals(hippoRoot: string, opts: GetActiveGoalsOpts): Goal[];
|
|
90
|
-
export declare function getActiveGoalsWithDb(db: DatabaseSyncLike, opts: GetActiveGoalsOpts): Goal[];
|
|
91
75
|
/** One `goal_recall_log` row: a boosted local memory recalled while its goal was active. */
|
|
92
76
|
export interface GoalRecallLogRow {
|
|
93
77
|
goalId: string;
|
|
@@ -97,7 +81,7 @@ export interface GoalRecallLogRow {
|
|
|
97
81
|
recalledAt: string;
|
|
98
82
|
score: number;
|
|
99
83
|
}
|
|
100
|
-
/** Options
|
|
84
|
+
/** Options of {@link boostByGoals}. */
|
|
101
85
|
export interface GoalStackBoostOpts {
|
|
102
86
|
sessionId: string;
|
|
103
87
|
tenantId: string;
|
|
@@ -114,35 +98,11 @@ export interface GoalStackBoost<R> {
|
|
|
114
98
|
results: R[];
|
|
115
99
|
log: GoalRecallLogRow[];
|
|
116
100
|
}
|
|
117
|
-
export declare function loadGoalPolicies(db: DatabaseSyncLike, active: readonly Goal[]): Map<string, RetrievalPolicy>;
|
|
118
101
|
/** The rows whose memory lives in this store: goal_recall_log.memory_id references memories, so a global row would fail
|
|
119
102
|
* the insert. A global result keeps its boost; it only earns no log row, so no outcome propagation. */
|
|
120
103
|
export declare function localGoalRecallRows(db: DatabaseSyncLike, rows: readonly GoalRecallLogRow[]): GoalRecallLogRow[];
|
|
121
|
-
/**
|
|
122
|
-
*
|
|
123
|
-
* rows when (tenant, session) has active goals and returns the log rows to
|
|
124
|
-
* write, without writing them; {@link writeGoalRecallLog} persists them.
|
|
125
|
-
*
|
|
126
|
-
* Caller responsibilities:
|
|
127
|
-
* - Do NOT call when an explicit `goalTag` is set (caller's gate)
|
|
128
|
-
* - Pass entry-backed rows (with `entry.tags`, `entry.id`, optional
|
|
129
|
-
* `entry.schema_fit`)
|
|
130
|
-
* - Manage the db handle lifecycle (helper neither opens nor closes)
|
|
131
|
-
* - Recompute `tokens` after if returned rows are projected to a budgeted
|
|
132
|
-
* shape
|
|
133
|
-
*
|
|
134
|
-
* Log rows cover the top `limit` boosted rows that live in this store's
|
|
135
|
-
* `memories` table (global-only ids are skipped to keep the FK on
|
|
136
|
-
* goal_recall_log.memory_id valid).
|
|
137
|
-
*
|
|
138
|
-
* @internal Recall ranking helper. Subject to change.
|
|
139
|
-
*/
|
|
140
|
-
export declare function computeGoalStackBoost<R extends {
|
|
141
|
-
entry: MemoryEntry;
|
|
142
|
-
score: number;
|
|
143
|
-
}>(db: DatabaseSyncLike, results: R[], opts: GoalStackBoostOpts): GoalStackBoost<R>;
|
|
144
|
-
/** {@link computeGoalStackBoost} over goals already read, touching no store. Its log keeps rows whose memory is global,
|
|
145
|
-
* since only the store can tell them apart; {@link localGoalRecallRows} drops those before the write. */
|
|
104
|
+
/** The goal-stack boost over goals already read, touching no store; a caller skips it under an explicit goal tag. Its log covers the top
|
|
105
|
+
* `limit` rows and keeps those whose memory is global, since only the store can tell them apart; {@link localGoalRecallRows} drops those before the write. */
|
|
146
106
|
export declare function boostByGoals<R extends {
|
|
147
107
|
entry: MemoryEntry;
|
|
148
108
|
score: number;
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
// src/goals.ts
|
|
1
|
+
// src/store/goals.ts
|
|
2
2
|
import { randomUUID } from 'node:crypto';
|
|
3
|
-
import { openHippoDb, closeHippoDb } from '
|
|
4
|
-
|
|
5
|
-
|
|
3
|
+
import { openHippoDb, closeHippoDb, withWriteScope } from '../db/index.js';
|
|
4
|
+
import { compareScoresDesc } from '../core/compare.js';
|
|
5
|
+
const MAX_ACTIVE_GOAL_DEPTH = 3;
|
|
6
|
+
const MAX_FINAL_MULTIPLIER = 3.0;
|
|
6
7
|
export function rowToGoal(row) {
|
|
7
8
|
return {
|
|
8
9
|
id: row.id,
|
|
@@ -40,7 +41,7 @@ export function pushGoal(hippoRoot, opts) {
|
|
|
40
41
|
*
|
|
41
42
|
* @internal Internal goal-stack invariant. Subject to change.
|
|
42
43
|
*/
|
|
43
|
-
|
|
44
|
+
function enforceDepthCapWithinTx(db, tenantId, sessionId) {
|
|
44
45
|
// SAFETY: the row comes from the SELECT above, which projects exactly one
|
|
45
46
|
// column, `c`, as a COUNT(*).
|
|
46
47
|
const activeCount = db.prepare(`
|
|
@@ -66,21 +67,10 @@ export function pushGoalWithDb(db, opts) {
|
|
|
66
67
|
const id = `g_${randomUUID().replace(/-/g, '').slice(0, 16)}`;
|
|
67
68
|
const createdAt = new Date().toISOString();
|
|
68
69
|
let policyId = null;
|
|
69
|
-
db
|
|
70
|
-
try {
|
|
70
|
+
withWriteScope(db, 'push_goal', () => {
|
|
71
71
|
// Depth cap: count active for (tenant, session); suspend oldest if at cap.
|
|
72
72
|
enforceDepthCapWithinTx(db, opts.tenantId, opts.sessionId);
|
|
73
|
-
|
|
74
|
-
// SAFETY: the row comes from the SELECT above, which projects exactly
|
|
75
|
-
// the tenant_id and session_id columns of goal_stack.
|
|
76
|
-
const parent = db.prepare(`SELECT tenant_id, session_id FROM goal_stack WHERE id = ?`).get(opts.parentGoalId);
|
|
77
|
-
if (!parent) {
|
|
78
|
-
throw new Error(`parent goal not found: ${opts.parentGoalId}`);
|
|
79
|
-
}
|
|
80
|
-
if (parent.tenant_id !== opts.tenantId || parent.session_id !== opts.sessionId) {
|
|
81
|
-
throw new Error(`parent goal ${opts.parentGoalId} belongs to a different (tenant, session)`);
|
|
82
|
-
}
|
|
83
|
-
}
|
|
73
|
+
assertParentInSession(db, opts);
|
|
84
74
|
// Parent goal_stack row first (FK target).
|
|
85
75
|
db.prepare(`
|
|
86
76
|
INSERT INTO goal_stack
|
|
@@ -90,23 +80,9 @@ export function pushGoalWithDb(db, opts) {
|
|
|
90
80
|
`).run(id, opts.sessionId, opts.tenantId, opts.goalName, opts.level ?? 0, opts.parentGoalId ?? null, opts.successCondition ?? null, createdAt);
|
|
91
81
|
// Optional policy row, then point goal_stack.retrieval_policy_id at it.
|
|
92
82
|
if (opts.policy) {
|
|
93
|
-
policyId =
|
|
94
|
-
db.prepare(`
|
|
95
|
-
INSERT INTO retrieval_policy
|
|
96
|
-
(id, goal_id, policy_type, weight_schema_fit, weight_recency, weight_outcome, error_priority)
|
|
97
|
-
VALUES (?, ?, ?, ?, ?, ?, ?)
|
|
98
|
-
`).run(policyId, id, opts.policy.policyType, opts.policy.weightSchemaFit ?? 1.0, opts.policy.weightRecency ?? 1.0, opts.policy.weightOutcome ?? 1.0, opts.policy.errorPriority ?? 1.0);
|
|
99
|
-
db.prepare(`UPDATE goal_stack SET retrieval_policy_id = ? WHERE id = ?`).run(policyId, id);
|
|
100
|
-
}
|
|
101
|
-
db.exec('COMMIT');
|
|
102
|
-
}
|
|
103
|
-
catch (err) {
|
|
104
|
-
try {
|
|
105
|
-
db.exec('ROLLBACK');
|
|
83
|
+
policyId = insertRetrievalPolicy(db, id, opts.policy);
|
|
106
84
|
}
|
|
107
|
-
|
|
108
|
-
throw err;
|
|
109
|
-
}
|
|
85
|
+
});
|
|
110
86
|
return {
|
|
111
87
|
id,
|
|
112
88
|
sessionId: opts.sessionId,
|
|
@@ -120,6 +96,30 @@ export function pushGoalWithDb(db, opts) {
|
|
|
120
96
|
createdAt,
|
|
121
97
|
};
|
|
122
98
|
}
|
|
99
|
+
function assertParentInSession(db, opts) {
|
|
100
|
+
if (!opts.parentGoalId)
|
|
101
|
+
return;
|
|
102
|
+
// SAFETY: the row comes from the SELECT above, which projects exactly
|
|
103
|
+
// the tenant_id and session_id columns of goal_stack.
|
|
104
|
+
const parent = db.prepare(`SELECT tenant_id, session_id FROM goal_stack WHERE id = ?`).get(opts.parentGoalId);
|
|
105
|
+
if (!parent) {
|
|
106
|
+
throw new Error(`parent goal not found: ${opts.parentGoalId}`);
|
|
107
|
+
}
|
|
108
|
+
if (parent.tenant_id !== opts.tenantId || parent.session_id !== opts.sessionId) {
|
|
109
|
+
throw new Error(`parent goal ${opts.parentGoalId} belongs to a different (tenant, session)`);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
/** Insert the policy row, then point goal_stack.retrieval_policy_id at it; returns the new policy id. */
|
|
113
|
+
function insertRetrievalPolicy(db, goalId, policy) {
|
|
114
|
+
const policyId = `rp_${randomUUID().replace(/-/g, '').slice(0, 16)}`;
|
|
115
|
+
db.prepare(`
|
|
116
|
+
INSERT INTO retrieval_policy
|
|
117
|
+
(id, goal_id, policy_type, weight_schema_fit, weight_recency, weight_outcome, error_priority)
|
|
118
|
+
VALUES (?, ?, ?, ?, ?, ?, ?)
|
|
119
|
+
`).run(policyId, goalId, policy.policyType, policy.weightSchemaFit ?? 1.0, policy.weightRecency ?? 1.0, policy.weightOutcome ?? 1.0, policy.errorPriority ?? 1.0);
|
|
120
|
+
db.prepare(`UPDATE goal_stack SET retrieval_policy_id = ? WHERE id = ?`).run(policyId, goalId);
|
|
121
|
+
return policyId;
|
|
122
|
+
}
|
|
123
123
|
export function getActiveGoals(hippoRoot, opts) {
|
|
124
124
|
const db = openHippoDb(hippoRoot);
|
|
125
125
|
try {
|
|
@@ -158,7 +158,7 @@ export function getSessionGoals(hippoRoot, opts) {
|
|
|
158
158
|
closeHippoDb(db);
|
|
159
159
|
}
|
|
160
160
|
}
|
|
161
|
-
|
|
161
|
+
function getActiveGoalsWithDb(db, opts) {
|
|
162
162
|
// SAFETY: rows come from the SELECT above, which projects exactly
|
|
163
163
|
// GoalRow's columns (in the same order goal_stack defines them).
|
|
164
164
|
const rows = db.prepare(`
|
|
@@ -174,7 +174,7 @@ export function getActiveGoalsWithDb(db, opts) {
|
|
|
174
174
|
// can compose onto the base goal-tag boost. Composed result is hard-capped
|
|
175
175
|
// at MAX_FINAL_MULTIPLIER (3.0x) BEFORE applying to score -- even an
|
|
176
176
|
// `errorPriority: 9.0` policy cannot exceed 3.0x.
|
|
177
|
-
|
|
177
|
+
function loadGoalPolicies(db, active) {
|
|
178
178
|
const policiesByGoalId = new Map();
|
|
179
179
|
for (const g of active) {
|
|
180
180
|
if (!g.retrievalPolicyId)
|
|
@@ -259,34 +259,8 @@ export function localGoalRecallRows(db, rows) {
|
|
|
259
259
|
const localIds = new Set(local.map((r) => r.id));
|
|
260
260
|
return rows.filter((r) => localIds.has(r.memoryId));
|
|
261
261
|
}
|
|
262
|
-
/**
|
|
263
|
-
*
|
|
264
|
-
* rows when (tenant, session) has active goals and returns the log rows to
|
|
265
|
-
* write, without writing them; {@link writeGoalRecallLog} persists them.
|
|
266
|
-
*
|
|
267
|
-
* Caller responsibilities:
|
|
268
|
-
* - Do NOT call when an explicit `goalTag` is set (caller's gate)
|
|
269
|
-
* - Pass entry-backed rows (with `entry.tags`, `entry.id`, optional
|
|
270
|
-
* `entry.schema_fit`)
|
|
271
|
-
* - Manage the db handle lifecycle (helper neither opens nor closes)
|
|
272
|
-
* - Recompute `tokens` after if returned rows are projected to a budgeted
|
|
273
|
-
* shape
|
|
274
|
-
*
|
|
275
|
-
* Log rows cover the top `limit` boosted rows that live in this store's
|
|
276
|
-
* `memories` table (global-only ids are skipped to keep the FK on
|
|
277
|
-
* goal_recall_log.memory_id valid).
|
|
278
|
-
*
|
|
279
|
-
* @internal Recall ranking helper. Subject to change.
|
|
280
|
-
*/
|
|
281
|
-
export function computeGoalStackBoost(db, results, opts) {
|
|
282
|
-
const goals = getActiveGoalsWithDb(db, { sessionId: opts.sessionId, tenantId: opts.tenantId });
|
|
283
|
-
if (goals.length === 0)
|
|
284
|
-
return { results, log: [] };
|
|
285
|
-
const boost = boostByGoals(results, { goals, policies: loadGoalPolicies(db, goals) }, opts);
|
|
286
|
-
return { results: boost.results, log: localGoalRecallRows(db, boost.log) };
|
|
287
|
-
}
|
|
288
|
-
/** {@link computeGoalStackBoost} over goals already read, touching no store. Its log keeps rows whose memory is global,
|
|
289
|
-
* since only the store can tell them apart; {@link localGoalRecallRows} drops those before the write. */
|
|
262
|
+
/** The goal-stack boost over goals already read, touching no store; a caller skips it under an explicit goal tag. Its log covers the top
|
|
263
|
+
* `limit` rows and keeps those whose memory is global, since only the store can tell them apart; {@link localGoalRecallRows} drops those before the write. */
|
|
290
264
|
export function boostByGoals(results, active, opts) {
|
|
291
265
|
const { trace } = opts;
|
|
292
266
|
if (active.goals.length === 0)
|
|
@@ -325,7 +299,7 @@ export function boostByGoals(results, active, opts) {
|
|
|
325
299
|
// tail -- a re-sort of an already deterministically-ordered ranking
|
|
326
300
|
// inherits its determinism via sort stability, and ties preserve the
|
|
327
301
|
// prior (meaningful) rank instead of reordering by content.
|
|
328
|
-
.sort((a, b) =>
|
|
302
|
+
.sort((a, b) => compareScoresDesc(a.score, b.score));
|
|
329
303
|
return { results: boosted, log: buildGoalRecallLog(boosted, matchesByEntryId, goalsByTag, opts) };
|
|
330
304
|
}
|
|
331
305
|
/**
|
|
@@ -353,18 +327,14 @@ export function completeGoal(hippoRoot, goalId, opts) {
|
|
|
353
327
|
try {
|
|
354
328
|
const completedAt = new Date().toISOString();
|
|
355
329
|
const score = opts.outcomeScore ?? null;
|
|
356
|
-
db
|
|
357
|
-
try {
|
|
330
|
+
withWriteScope(db, 'complete_goal', () => {
|
|
358
331
|
// SAFETY: the row comes from the SELECT above, which projects exactly
|
|
359
332
|
// the created_at and status columns of goal_stack.
|
|
360
333
|
const goalRow = db.prepare(`SELECT created_at, status FROM goal_stack WHERE id = ?`).get(goalId);
|
|
361
|
-
if (!goalRow)
|
|
362
|
-
db.exec('COMMIT');
|
|
334
|
+
if (!goalRow)
|
|
363
335
|
return;
|
|
364
|
-
}
|
|
365
336
|
if (goalRow.status === 'completed') {
|
|
366
337
|
// Already completed -- second call is a no-op for idempotency.
|
|
367
|
-
db.exec('COMMIT');
|
|
368
338
|
return;
|
|
369
339
|
}
|
|
370
340
|
db.prepare(`
|
|
@@ -394,15 +364,7 @@ export function completeGoal(hippoRoot, goalId, opts) {
|
|
|
394
364
|
`).run(multiplier, goalId, goalRow.created_at, completedAt);
|
|
395
365
|
}
|
|
396
366
|
}
|
|
397
|
-
|
|
398
|
-
}
|
|
399
|
-
catch (err) {
|
|
400
|
-
try {
|
|
401
|
-
db.exec('ROLLBACK');
|
|
402
|
-
}
|
|
403
|
-
catch { /* already rolled back; keep the original error */ }
|
|
404
|
-
throw err;
|
|
405
|
-
}
|
|
367
|
+
});
|
|
406
368
|
}
|
|
407
369
|
finally {
|
|
408
370
|
closeHippoDb(db);
|
|
@@ -420,26 +382,15 @@ export function suspendGoal(hippoRoot, goalId) {
|
|
|
420
382
|
export function resumeGoal(hippoRoot, goalId) {
|
|
421
383
|
const db = openHippoDb(hippoRoot);
|
|
422
384
|
try {
|
|
423
|
-
db
|
|
424
|
-
try {
|
|
385
|
+
withWriteScope(db, 'resume_goal', () => {
|
|
425
386
|
// SAFETY: the row comes from the SELECT above, which projects exactly
|
|
426
387
|
// the session_id, tenant_id, and status columns of goal_stack.
|
|
427
388
|
const row = db.prepare(`SELECT session_id, tenant_id, status FROM goal_stack WHERE id = ?`).get(goalId);
|
|
428
|
-
if (!row || row.status !== 'suspended')
|
|
429
|
-
db.exec('COMMIT');
|
|
389
|
+
if (!row || row.status !== 'suspended')
|
|
430
390
|
return;
|
|
431
|
-
}
|
|
432
391
|
enforceDepthCapWithinTx(db, row.tenant_id, row.session_id);
|
|
433
392
|
db.prepare(`UPDATE goal_stack SET status = 'active' WHERE id = ?`).run(goalId);
|
|
434
|
-
|
|
435
|
-
}
|
|
436
|
-
catch (err) {
|
|
437
|
-
try {
|
|
438
|
-
db.exec('ROLLBACK');
|
|
439
|
-
}
|
|
440
|
-
catch { /* already rolled back; keep the original error */ }
|
|
441
|
-
throw err;
|
|
442
|
-
}
|
|
393
|
+
});
|
|
443
394
|
}
|
|
444
395
|
finally {
|
|
445
396
|
closeHippoDb(db);
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Fail-soft producer hook: mark a tenant dirty for graph re-extraction by
|
|
3
|
+
* enqueuing its consolidated mirror memory. NEVER throws into the caller — a
|
|
4
|
+
* graph-dirty signal failing must not abort a core object write. Graph staleness is
|
|
5
|
+
* recoverable (next sleep / manual `graph extract`); a broken `hippo decide` is
|
|
6
|
+
* not. Called POST-COMMIT from the graph-source save/close mutations of
|
|
7
|
+
* decision, policy, customer_note and project_brief. A null memoryId (a
|
|
8
|
+
* forgotten mirror) is a no-op.
|
|
9
|
+
*/
|
|
10
|
+
export declare function markGraphDirty(hippoRoot: string, tenantId: string, memoryId: string | null): void;
|
|
11
|
+
/**
|
|
12
|
+
* Mark every pending queue item for a tenant with `id <= maxId` processed, in
|
|
13
|
+
* one UPDATE. Status/processed_at only, so the consolidated-source guard trigger
|
|
14
|
+
* is not involved. Returns the count marked.
|
|
15
|
+
* The `<= maxId` watermark excludes items enqueued after the drain snapshot.
|
|
16
|
+
*/
|
|
17
|
+
export declare function markPendingProcessedUpTo(hippoRoot: string, tenantId: string, maxId: number): number;
|
|
18
|
+
/**
|
|
19
|
+
* The dirty tenants awaiting graph re-extraction, each with the MAX pending
|
|
20
|
+
* queue id at read time (a watermark). The sleep drain rebuilds each tenant's
|
|
21
|
+
* graph, then marks only items at or below the watermark processed, so items
|
|
22
|
+
* enqueued DURING the rebuild stay pending for the next sleep (no lost-update
|
|
23
|
+
* race). Host-wide read (the queue is per-tenant but sleep is cross-tenant).
|
|
24
|
+
*/
|
|
25
|
+
export declare function loadPendingExtractionTenants(hippoRoot: string): {
|
|
26
|
+
tenantId: string;
|
|
27
|
+
maxPendingId: number;
|
|
28
|
+
}[];
|
|
29
|
+
//# sourceMappingURL=graph-queue.d.ts.map
|