hippo-memory 1.69.0 → 1.71.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +5 -2
- package/dist/agent-memories/apply.d.ts +3 -3
- package/dist/agent-memories/apply.js +16 -31
- package/dist/agent-memories/claude-code.d.ts +5 -5
- package/dist/agent-memories/claude-code.js +25 -12
- package/dist/agent-memories/copilot.js +3 -2
- package/dist/agent-memories/files.js +26 -14
- 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/markdown.d.ts +1 -3
- package/dist/agent-memories/markdown.js +1 -3
- package/dist/agent-memories/report.d.ts +1 -1
- package/dist/agent-memories/report.js +3 -2
- package/dist/agent-memories/source.d.ts +1 -1
- package/dist/agent-memories/source.js +6 -5
- package/dist/agent-memories/sync.d.ts +5 -3
- package/dist/agent-memories/sync.js +34 -38
- package/dist/agent-memories/types.d.ts +1 -1
- package/dist/api/assemble.d.ts +9 -46
- package/dist/api/assemble.js +44 -54
- package/dist/api/audit.d.ts +8 -7
- package/dist/api/audit.js +15 -21
- package/dist/api/auth.d.ts +17 -39
- package/dist/api/auth.js +76 -216
- 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} +4 -17
- package/dist/{availability.js → api/availability.js} +14 -44
- package/dist/{context-auto.js → api/context-auto.js} +2 -1
- package/dist/{context-render.d.ts → api/context-render.d.ts} +4 -4
- package/dist/{context-render.js → api/context-render.js} +7 -6
- package/dist/api/context-select.d.ts +5 -5
- package/dist/api/context-select.js +39 -48
- package/dist/api/context-types.d.ts +15 -40
- package/dist/api/context.d.ts +7 -26
- package/dist/api/context.js +67 -97
- package/dist/api/dormant.d.ts +7 -23
- package/dist/api/dormant.js +40 -128
- package/dist/api/drill-down.d.ts +9 -48
- package/dist/api/drill-down.js +41 -90
- package/dist/api/forget.d.ts +5 -33
- package/dist/api/forget.js +17 -73
- package/dist/api/goals.d.ts +1 -1
- package/dist/api/goals.js +2 -2
- package/dist/api/graph.d.ts +8 -0
- package/dist/api/graph.js +7 -0
- package/dist/api/index.d.ts +28 -0
- package/dist/api/index.js +31 -0
- package/dist/api/instruction-detect.js +85 -0
- package/dist/api/learn.js +63 -55
- package/dist/api/ledger-db.d.ts +21 -0
- package/dist/api/ledger-db.js +81 -0
- package/dist/api/memories.d.ts +5 -0
- package/dist/api/memories.js +7 -0
- package/dist/api/objects.d.ts +9 -0
- package/dist/api/objects.js +11 -0
- package/dist/api/on-store.d.ts +16 -0
- package/dist/api/on-store.js +38 -0
- package/dist/api/outcome.d.ts +5 -42
- package/dist/api/outcome.js +15 -80
- package/dist/{pilot-arm.d.ts → api/pilot-arm.d.ts} +1 -1
- package/dist/{pilot-arm.js → api/pilot-arm.js} +15 -23
- package/dist/api/predictions.d.ts +9 -0
- package/dist/api/predictions.js +18 -0
- package/dist/api/promote.d.ts +16 -31
- package/dist/api/promote.js +38 -123
- package/dist/{prompt-hook.d.ts → api/prompt-hook.d.ts} +11 -11
- package/dist/{prompt-hook.js → api/prompt-hook.js} +42 -60
- package/dist/api/quarantine.d.ts +5 -5
- package/dist/api/quarantine.js +30 -106
- package/dist/api/recall-cli.d.ts +55 -0
- package/dist/api/recall-cli.js +94 -0
- package/dist/api/recall-core.d.ts +4 -0
- package/dist/api/recall-core.js +120 -0
- package/dist/api/recall-finish.d.ts +53 -0
- package/dist/api/recall-finish.js +30 -0
- package/dist/api/recall-history.d.ts +64 -0
- package/dist/api/recall-history.js +159 -0
- package/dist/{recall-pipeline.d.ts → api/recall-pipeline.d.ts} +7 -8
- package/dist/{recall-pipeline.js → api/recall-pipeline.js} +60 -48
- 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 +101 -316
- package/dist/api/recall.d.ts +5 -33
- package/dist/api/recall.js +92 -91
- package/dist/api/refine.d.ts +7 -0
- package/dist/api/refine.js +10 -0
- package/dist/api/remember-local.d.ts +57 -0
- package/dist/api/remember-local.js +90 -0
- package/dist/api/remember.d.ts +27 -12
- package/dist/api/remember.js +42 -46
- 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 -9
- package/dist/api/sleep-run.js +78 -94
- package/dist/api/sleep.d.ts +10 -29
- package/dist/api/tokens.d.ts +5 -12
- package/dist/api/tokens.js +12 -31
- package/dist/api/types.d.ts +8 -31
- package/dist/api/types.js +5 -23
- 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 +5 -13
- package/dist/capture/command.js +57 -60
- 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 +8 -16
- package/dist/capture/compact.js +56 -47
- 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} +143 -157
- package/dist/{compaction-spool.d.ts → capture/compaction-spool.d.ts} +1 -1
- package/dist/{compaction-spool.js → capture/compaction-spool.js} +18 -14
- package/dist/capture/copilot-transcript.js +1 -1
- package/dist/capture/extract.js +2 -2
- package/dist/capture/failure-caller.d.ts +2 -2
- package/dist/capture/failure-caller.js +6 -6
- package/dist/capture/failure-reading.d.ts +2 -5
- package/dist/capture/failure-reading.js +11 -12
- package/dist/{handoff-evidence.d.ts → capture/handoff-evidence.d.ts} +1 -1
- package/dist/{handoff-evidence.js → capture/handoff-evidence.js} +2 -1
- package/dist/capture/pre-compact-caller.d.ts +1 -1
- package/dist/capture/pre-compact-caller.js +2 -2
- package/dist/{session-digest.d.ts → capture/session-digest.d.ts} +2 -6
- package/dist/{session-digest.js → capture/session-digest.js} +29 -29
- package/dist/capture/session-end-caller.d.ts +2 -2
- package/dist/capture/session-end-caller.js +1 -1
- package/dist/capture/session-texts.d.ts +1 -1
- package/dist/capture/session-texts.js +5 -5
- package/dist/capture/session-worker.js +6 -4
- package/dist/{share-scrub.js → capture/share-scrub.js} +2 -2
- package/dist/capture/transcript.d.ts +2 -10
- package/dist/capture/transcript.js +72 -92
- package/dist/capture/working-state.d.ts +0 -3
- package/dist/capture/working-state.js +7 -7
- package/dist/cli/api-context.d.ts +3 -0
- package/dist/cli/api-context.js +6 -0
- package/dist/cli/audit-prune.d.ts +28 -0
- package/dist/cli/audit-prune.js +40 -0
- package/dist/cli/audit.d.ts +2 -2
- package/dist/cli/audit.js +92 -88
- package/dist/cli/auth.d.ts +2 -1
- package/dist/cli/auth.js +69 -53
- package/dist/cli/briefs.d.ts +4 -3
- package/dist/cli/briefs.js +76 -202
- package/dist/cli/card.d.ts +2 -1
- package/dist/cli/card.js +55 -54
- package/dist/cli/client.d.ts +28 -0
- package/dist/{client.js → cli/client.js} +25 -44
- package/dist/cli/compact-resume-payload.d.ts +8 -0
- package/dist/cli/compact-resume-payload.js +40 -0
- package/dist/cli/context.d.ts +1 -13
- package/dist/cli/context.js +51 -77
- package/dist/cli/continuity.d.ts +6 -5
- package/dist/cli/continuity.js +153 -145
- package/dist/cli/correction-latency.d.ts +24 -0
- package/dist/{correction-latency.js → cli/correction-latency.js} +2 -14
- package/dist/cli/curate.d.ts +13 -17
- package/dist/cli/curate.js +226 -222
- package/dist/cli/dag.d.ts +4 -4
- package/dist/cli/dag.js +70 -52
- package/dist/cli/decisions.d.ts +4 -3
- package/dist/cli/decisions.js +129 -253
- package/dist/cli/eval.d.ts +1 -3
- package/dist/cli/eval.js +56 -42
- package/dist/cli/exit.d.ts +6 -0
- package/dist/cli/exit.js +11 -0
- package/dist/cli/explain.d.ts +1 -2
- package/dist/cli/explain.js +39 -21
- package/dist/cli/flag-values.d.ts +30 -0
- package/dist/cli/flag-values.js +120 -0
- package/dist/cli/flags.d.ts +304 -0
- package/dist/cli/flags.js +169 -0
- package/dist/cli/github.d.ts +14 -0
- package/dist/cli/github.js +184 -0
- package/dist/cli/goals.d.ts +2 -1
- package/dist/cli/goals.js +76 -75
- package/dist/cli/hook-runtime.d.ts +31 -0
- package/dist/cli/hook-runtime.js +139 -0
- package/dist/cli/init.d.ts +2 -1
- package/dist/cli/init.js +153 -126
- package/dist/cli/install-steps.d.ts +7 -0
- package/dist/cli/install-steps.js +101 -0
- package/dist/cli/last-sleep.d.ts +3 -1
- package/dist/cli/last-sleep.js +12 -7
- package/dist/cli/maintenance.d.ts +5 -4
- package/dist/cli/maintenance.js +41 -42
- package/dist/cli/object-verbs.d.ts +40 -0
- package/dist/cli/object-verbs.js +66 -0
- package/dist/cli/owner-validation.d.ts +18 -0
- package/dist/cli/owner-validation.js +33 -0
- package/dist/cli/playbooks.d.ts +4 -3
- package/dist/cli/playbooks.js +98 -306
- package/dist/cli/print.d.ts +15 -0
- package/dist/cli/print.js +82 -0
- package/dist/cli/projects.d.ts +2 -3
- package/dist/cli/projects.js +56 -51
- package/dist/cli/provenance-coverage.d.ts +14 -0
- package/dist/{provenance-coverage.js → cli/provenance-coverage.js} +2 -6
- package/dist/cli/quality-repair-once.js +4 -4
- package/dist/cli/recall.d.ts +2 -6
- package/dist/cli/recall.js +128 -253
- package/dist/cli/refine-llm.d.ts +35 -0
- package/dist/cli/refine-llm.js +128 -0
- package/dist/cli/remember.d.ts +4 -6
- package/dist/cli/remember.js +193 -230
- package/dist/{scheduler.d.ts → cli/scheduler.d.ts} +4 -17
- package/dist/{scheduler.js → cli/scheduler.js} +22 -22
- package/dist/cli/serve.d.ts +1 -1
- package/dist/cli/serve.js +46 -7
- package/dist/cli/session-hooks.d.ts +11 -19
- package/dist/cli/session-hooks.js +263 -258
- package/dist/cli/setup.d.ts +4 -3
- package/dist/cli/setup.js +55 -37
- package/dist/cli/shared.d.ts +14 -118
- package/dist/cli/shared.js +26 -400
- package/dist/cli/slack.d.ts +2 -1
- package/dist/cli/slack.js +46 -74
- package/dist/cli/sleep-render.d.ts +4 -0
- package/dist/cli/sleep-render.js +61 -0
- package/dist/cli/sleep.d.ts +3 -8
- package/dist/cli/sleep.js +34 -91
- package/dist/cli/status.d.ts +9 -12
- package/dist/cli/status.js +86 -131
- package/dist/{stdin.d.ts → cli/stdin.d.ts} +4 -6
- package/dist/{stdin.js → cli/stdin.js} +8 -9
- package/dist/cli/transfer.d.ts +9 -9
- package/dist/cli/transfer.js +125 -122
- package/dist/cli/usage.js +13 -5
- package/dist/cli.d.ts +69 -167
- package/dist/cli.js +187 -296
- package/dist/connectors/dlq.d.ts +44 -0
- package/dist/connectors/dlq.js +30 -0
- package/dist/connectors/github/backfill.d.ts +6 -26
- package/dist/connectors/github/backfill.js +42 -114
- package/dist/connectors/github/deletion.d.ts +6 -21
- package/dist/connectors/github/deletion.js +17 -64
- package/dist/connectors/github/dlq.d.ts +12 -91
- package/dist/connectors/github/dlq.js +23 -140
- package/dist/connectors/github/ingest.d.ts +4 -37
- package/dist/connectors/github/ingest.js +24 -93
- package/dist/connectors/github/octokit-client.d.ts +5 -17
- package/dist/connectors/github/octokit-client.js +29 -25
- package/dist/connectors/github/ratelimit.d.ts +3 -14
- package/dist/connectors/github/ratelimit.js +3 -14
- package/dist/connectors/github/scope.d.ts +3 -5
- package/dist/connectors/github/scope.js +3 -5
- package/dist/connectors/github/signature.d.ts +4 -26
- package/dist/connectors/github/signature.js +4 -26
- package/dist/connectors/github/tenant-routing.d.ts +4 -26
- package/dist/connectors/github/tenant-routing.js +13 -61
- package/dist/connectors/github/transform.d.ts +1 -1
- package/dist/connectors/github/transform.js +2 -16
- package/dist/connectors/github/types.d.ts +4 -16
- package/dist/connectors/github/types.js +17 -27
- package/dist/connectors/github/webhook.d.ts +5 -18
- package/dist/connectors/github/webhook.js +86 -105
- package/dist/connectors/slack/backfill.d.ts +5 -18
- package/dist/connectors/slack/backfill.js +9 -42
- package/dist/connectors/slack/deletion.d.ts +4 -7
- package/dist/connectors/slack/deletion.js +20 -49
- package/dist/connectors/slack/dlq.d.ts +9 -68
- package/dist/connectors/slack/dlq.js +26 -136
- package/dist/connectors/slack/ingest.d.ts +4 -18
- package/dist/connectors/slack/ingest.js +26 -91
- package/dist/connectors/slack/scope.d.ts +2 -8
- package/dist/connectors/slack/scope.js +2 -8
- package/dist/connectors/slack/signature.d.ts +1 -6
- package/dist/connectors/slack/signature.js +2 -1
- package/dist/connectors/slack/tenant-routing.d.ts +4 -18
- package/dist/connectors/slack/tenant-routing.js +11 -31
- package/dist/connectors/slack/transform.d.ts +3 -19
- package/dist/connectors/slack/transform.js +2 -18
- package/dist/connectors/slack/types.d.ts +4 -10
- package/dist/connectors/slack/types.js +5 -16
- package/dist/connectors/slack/web-client.js +34 -28
- package/dist/connectors/slack/webhook.d.ts +5 -21
- package/dist/connectors/slack/webhook.js +80 -108
- package/dist/connectors/slack/workspaces.d.ts +8 -41
- package/dist/connectors/slack/workspaces.js +8 -58
- package/dist/consolidate/conflicts.d.ts +1 -1
- package/dist/consolidate/conflicts.js +10 -18
- package/dist/consolidate/dag-summary.d.ts +8 -0
- package/dist/consolidate/dag-summary.js +41 -0
- package/dist/{dag.d.ts → consolidate/dag.d.ts} +6 -29
- package/dist/{dag.js → consolidate/dag.js} +49 -131
- package/dist/consolidate/decay.d.ts +2 -2
- package/dist/consolidate/decay.js +35 -41
- package/dist/consolidate/dedupe.d.ts +29 -0
- package/dist/consolidate/dedupe.js +103 -0
- package/dist/consolidate/flush-units.d.ts +5 -6
- package/dist/consolidate/flush-units.js +3 -3
- package/dist/consolidate/half-life-migration.d.ts +34 -0
- package/dist/consolidate/half-life-migration.js +89 -0
- package/dist/consolidate/llm-passes.js +12 -29
- package/dist/consolidate/memory-value-weights.d.ts +8 -0
- package/dist/{memory-value-weights.js → consolidate/memory-value-weights.js} +2 -13
- package/dist/consolidate/memory-value.d.ts +45 -0
- package/dist/consolidate/memory-value.js +164 -0
- package/dist/consolidate/merge.js +65 -83
- package/dist/{merged-row.d.ts → consolidate/merged-row.d.ts} +1 -1
- package/dist/{merged-row.js → consolidate/merged-row.js} +4 -3
- package/dist/consolidate/physics-pass.js +46 -48
- package/dist/consolidate/replay.d.ts +9 -0
- package/dist/consolidate/replay.js +84 -0
- package/dist/consolidate/run.d.ts +7 -13
- package/dist/consolidate/run.js +6 -37
- package/dist/consolidate/sleep.d.ts +2 -9
- package/dist/consolidate/sleep.js +69 -151
- package/dist/consolidate/trace.d.ts +19 -0
- package/dist/{trace.js → consolidate/trace.js} +7 -24
- package/dist/consolidate/traces.js +40 -51
- package/dist/core/ablation.d.ts +15 -0
- package/dist/core/ablation.js +49 -0
- 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.d.ts → core/ambient.d.ts} +1 -8
- package/dist/{ambient.js → core/ambient.js} +13 -18
- package/dist/{capture-contract.d.ts → core/capture-contract.d.ts} +16 -3
- package/dist/{capture-contract.js → core/capture-contract.js} +67 -1
- package/dist/{card.d.ts → core/card.d.ts} +4 -1
- package/dist/{card.js → core/card.js} +8 -0
- package/dist/core/compare.d.ts +32 -0
- package/dist/core/compare.js +70 -0
- package/dist/{config.d.ts → core/config.d.ts} +14 -28
- package/dist/{config.js → core/config.js} +101 -75
- package/dist/{handoff.d.ts → core/handoff.d.ts} +1 -7
- package/dist/core/handoff.js +81 -0
- package/dist/{memory-quality.js → core/memory-quality.js} +2 -2
- package/dist/core/memory.d.ts +183 -0
- package/dist/core/memory.js +380 -0
- package/dist/core/package-root.d.ts +3 -0
- package/dist/core/package-root.js +5 -0
- package/dist/{physics-config.d.ts → core/physics-config.d.ts} +1 -4
- package/dist/{physics-config.js → core/physics-config.js} +3 -8
- package/dist/{physics.d.ts → core/physics.d.ts} +16 -62
- package/dist/{physics.js → core/physics.js} +60 -122
- package/dist/{project-identity.d.ts → core/project-identity.d.ts} +17 -63
- package/dist/{project-identity.js → core/project-identity.js} +22 -55
- package/dist/{project-remote.js → core/project-remote.js} +17 -6
- package/dist/{prompt-recall.js → core/prompt-recall.js} +1 -1
- package/dist/core/raw-append-only.d.ts +5 -0
- package/dist/core/raw-append-only.js +7 -0
- package/dist/{salience.d.ts → core/salience.d.ts} +1 -7
- package/dist/{salience.js → core/salience.js} +36 -27
- 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} +7 -7
- 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} +11 -10
- package/dist/{dashboard-snapshot.js → dashboard/dashboard-snapshot.js} +110 -104
- package/dist/{dashboard-types.d.ts → dashboard/dashboard-types.d.ts} +2 -1
- package/dist/{dashboard.d.ts → dashboard/dashboard.d.ts} +1 -0
- package/dist/{dashboard.js → dashboard/dashboard.js} +172 -55
- package/dist/db/backup.js +1 -1
- package/dist/db/busy.d.ts +19 -2
- package/dist/db/busy.js +88 -14
- package/dist/db/connect.d.ts +11 -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 +28 -33
- package/dist/db/migrations/types.d.ts +2 -5
- package/dist/db/migrations/v08.js +1 -1
- package/dist/db/migrations/v14.js +39 -36
- package/dist/db/migrations/v15.js +2 -8
- package/dist/db/migrations/v16.js +31 -29
- package/dist/db/migrations/v17.js +2 -3
- package/dist/db/migrations/v18.js +6 -5
- package/dist/db/migrations/v19.js +2 -5
- package/dist/db/migrations/v20.js +5 -8
- package/dist/db/migrations/v22.js +28 -38
- package/dist/db/migrations/v23.js +3 -14
- package/dist/db/migrations/v24.js +25 -22
- package/dist/db/migrations/v25.js +3 -8
- package/dist/db/migrations/v26.js +2 -13
- package/dist/db/migrations/v27.js +3 -11
- package/dist/db/migrations/v28.js +2 -14
- package/dist/db/migrations/v29.js +23 -32
- package/dist/db/migrations/v30.js +4 -16
- package/dist/db/migrations/v31.js +23 -31
- package/dist/db/migrations/v32.js +4 -22
- package/dist/db/migrations/v33.js +2 -15
- package/dist/db/migrations/v34.js +2 -11
- package/dist/db/migrations/v35.js +2 -11
- package/dist/db/migrations/v36.js +2 -11
- package/dist/db/migrations/v37.js +8 -33
- package/dist/db/migrations/v38.js +5 -38
- package/dist/db/migrations/v39.js +10 -21
- package/dist/db/migrations/v40.js +8 -14
- package/dist/db/migrations/v41.js +2 -24
- package/dist/db/migrations/v43.js +7 -6
- package/dist/db/migrations/v44.js +2 -8
- package/dist/db/migrations/v45.js +2 -7
- package/dist/db/migrations/v46.js +1 -1
- package/dist/db/migrations/v47.js +2 -3
- 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/v51.js +1 -1
- package/dist/db/migrations/v52.js +1 -1
- package/dist/db/open.d.ts +11 -1
- package/dist/db/open.js +37 -4
- package/dist/db/physics-state.d.ts +23 -0
- package/dist/{physics-state.js → db/physics-state.js} +34 -52
- package/dist/db/raw-archive-mirror-cleanup.d.ts +5 -0
- package/dist/{raw-archive-mirror-cleanup.js → db/raw-archive-mirror-cleanup.js} +10 -20
- 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} +6 -2
- package/dist/{vector-store.js → db/vector-store.js} +83 -51
- package/dist/db/wal-checkpointer.d.ts +11 -0
- package/dist/db/wal-checkpointer.js +92 -0
- package/dist/doctor.js +176 -152
- 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 +5 -4
- package/dist/{eval-stats.d.ts → eval/eval-stats.d.ts} +15 -53
- package/dist/{eval-stats.js → eval/eval-stats.js} +24 -51
- package/dist/{eval-suite.d.ts → eval/eval-suite.d.ts} +3 -14
- package/dist/{eval-suite.js → eval/eval-suite.js} +99 -57
- package/dist/{eval.d.ts → eval/eval.d.ts} +7 -25
- package/dist/{eval.js → eval/eval.js} +35 -55
- package/dist/{judgment.d.ts → eval/judgment.d.ts} +1 -6
- package/dist/{judgment.js → eval/judgment.js} +23 -20
- package/dist/extensions/openclaw-plugin/index.js +2 -3
- 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} +10 -32
- package/dist/{graph-extract.js → graph/extract.js} +40 -81
- package/dist/{graph-recall.d.ts → graph/recall.d.ts} +9 -22
- package/dist/{graph-recall.js → graph/recall.js} +65 -108
- package/dist/graph/stream.d.ts +38 -0
- package/dist/{graph-stream.js → graph/stream.js} +20 -41
- package/dist/graph/view.d.ts +50 -0
- package/dist/graph/view.js +265 -0
- 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 +16 -17
- package/dist/hooks/copilot.d.ts +1 -8
- package/dist/hooks/copilot.js +16 -16
- package/dist/{cli → hooks}/hook-blocks.d.ts +6 -2
- package/dist/{cli → hooks}/hook-blocks.js +38 -125
- package/dist/hooks/json-hooks.d.ts +5 -37
- package/dist/hooks/json-hooks.js +49 -179
- package/dist/hooks/opencode.d.ts +0 -38
- package/dist/hooks/opencode.js +44 -103
- package/dist/hooks/shared.d.ts +8 -21
- package/dist/hooks/shared.js +30 -25
- package/dist/importers/core.d.ts +13 -42
- package/dist/importers/core.js +48 -64
- package/dist/importers/markdown-parse.d.ts +9 -32
- package/dist/importers/markdown-parse.js +10 -44
- package/dist/importers/markdown.js +5 -13
- package/dist/importers/sources.js +57 -81
- package/dist/importers/vault.d.ts +2 -8
- package/dist/importers/vault.js +95 -172
- package/dist/index.d.ts +26 -22
- package/dist/index.js +25 -21
- package/dist/learn/autolearn.d.ts +29 -0
- package/dist/{autolearn.js → learn/autolearn.js} +26 -51
- 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 +123 -0
- package/dist/learn/forward-claim-detector.d.ts +12 -0
- package/dist/learn/forward-claim-detector.js +60 -0
- package/dist/{invalidation.d.ts → learn/invalidation.d.ts} +10 -18
- package/dist/{invalidation.js → learn/invalidation.js} +92 -125
- package/dist/mcp/admin-tools.d.ts +1 -1
- package/dist/mcp/admin-tools.js +39 -64
- package/dist/mcp/format.d.ts +5 -5
- package/dist/mcp/format.js +7 -6
- package/dist/mcp/framing.d.ts +6 -0
- package/dist/mcp/framing.js +11 -3
- package/dist/mcp/memory-tools.js +10 -35
- package/dist/mcp/protocol.d.ts +14 -36
- package/dist/mcp/protocol.js +10 -19
- package/dist/mcp/recall-tools.d.ts +2 -2
- package/dist/mcp/recall-tools.js +70 -52
- package/dist/mcp/request.d.ts +3 -11
- package/dist/mcp/request.js +71 -85
- package/dist/mcp/server.d.ts +3 -9
- package/dist/mcp/server.js +6 -17
- package/dist/mcp/session-state.d.ts +2 -3
- package/dist/mcp/session-state.js +7 -13
- package/dist/mcp/shared-gate.js +1 -1
- package/dist/mcp/stdio.d.ts +2 -6
- package/dist/mcp/stdio.js +112 -38
- package/dist/mcp/tool-args.js +2 -1
- package/dist/mcp/tools.js +7 -5
- package/dist/objects/customer-notes.d.ts +44 -0
- package/dist/objects/customer-notes.js +71 -0
- package/dist/objects/decisions.d.ts +41 -0
- package/dist/objects/decisions.js +63 -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/objects/incidents.d.ts +45 -0
- package/dist/objects/incidents.js +96 -0
- package/dist/objects/lifecycle.d.ts +27 -0
- package/dist/objects/lifecycle.js +96 -0
- package/dist/objects/policies.d.ts +60 -0
- package/dist/objects/policies.js +102 -0
- package/dist/objects/processes.d.ts +43 -0
- package/dist/objects/processes.js +92 -0
- package/dist/objects/project-briefs.d.ts +63 -0
- package/dist/objects/project-briefs.js +194 -0
- package/dist/objects/skills.d.ts +51 -0
- package/dist/objects/skills.js +110 -0
- package/dist/postinstall.js +10 -21
- package/dist/predictions/planning-fallacy.d.ts +14 -109
- package/dist/predictions/planning-fallacy.js +4 -129
- package/dist/rerankers/clef.d.ts +2 -6
- package/dist/rerankers/clef.js +28 -76
- package/dist/rerankers/cross-encoder.d.ts +0 -7
- package/dist/rerankers/cross-encoder.js +18 -28
- package/dist/rerankers/index.js +8 -7
- package/dist/rerankers/jev.d.ts +1 -4
- package/dist/rerankers/jev.js +36 -52
- package/dist/rerankers/llm.d.ts +2 -13
- package/dist/rerankers/llm.js +42 -59
- package/dist/rerankers/outage-warning.d.ts +8 -0
- package/dist/rerankers/outage-warning.js +32 -0
- package/dist/rerankers/remote.d.ts +4 -0
- package/dist/rerankers/remote.js +25 -0
- package/dist/rerankers/types.d.ts +3 -15
- 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 -3
- package/dist/search/boosts.js +36 -15
- 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/goal-boost.d.ts +23 -0
- package/dist/search/goal-boost.js +90 -0
- package/dist/search/hybrid-score.d.ts +2 -2
- package/dist/search/hybrid-score.js +1 -1
- package/dist/search/hybrid.d.ts +6 -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} +9 -8
- package/dist/search/path-context.d.ts +11 -0
- package/dist/{path-context.js → search/path-context.js} +8 -19
- package/dist/search/physics-search.d.ts +4 -4
- package/dist/search/physics-search.js +25 -22
- package/dist/search/rerank.d.ts +3 -3
- package/dist/search/rerank.js +4 -3
- package/dist/search/rrf.d.ts +15 -0
- package/dist/search/rrf.js +36 -0
- package/dist/search/temporal.d.ts +1 -1
- package/dist/search/temporal.js +5 -2
- package/dist/search/vector.d.ts +10 -3
- package/dist/search/vector.js +51 -15
- package/dist/server/auth.d.ts +10 -29
- package/dist/server/auth.js +57 -42
- package/dist/server/boot.d.ts +5 -0
- package/dist/server/boot.js +432 -0
- package/dist/server/client-ip.d.ts +8 -20
- package/dist/server/client-ip.js +23 -34
- 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/defaults.d.ts +3 -0
- package/dist/server/defaults.js +4 -0
- package/dist/server/key-check-bounds.d.ts +9 -0
- package/dist/server/key-check-bounds.js +46 -0
- package/dist/server/lifecycle.d.ts +5 -4
- package/dist/server/lifecycle.js +20 -5
- package/dist/server/mcp-http.d.ts +1 -4
- package/dist/server/mcp-http.js +44 -68
- package/dist/server/rate-limit.d.ts +21 -0
- package/dist/{rate-limit.js → server/rate-limit.js} +4 -13
- package/dist/server/ready.d.ts +7 -0
- package/dist/server/ready.js +38 -0
- package/dist/server/request.d.ts +14 -12
- package/dist/server/request.js +71 -28
- package/dist/server/route-table.d.ts +15 -0
- package/dist/server/route-table.js +202 -0
- package/dist/server/routes/admin.js +29 -30
- package/dist/server/routes/customer-notes.d.ts +5 -5
- package/dist/server/routes/customer-notes.js +35 -105
- package/dist/server/routes/decisions.d.ts +5 -5
- package/dist/server/routes/decisions.js +45 -115
- package/dist/server/routes/incidents.d.ts +5 -5
- package/dist/server/routes/incidents.js +44 -105
- package/dist/server/routes/memories.js +21 -43
- package/dist/server/routes/object-routes.d.ts +35 -0
- package/dist/server/routes/object-routes.js +72 -0
- package/dist/server/routes/policies.d.ts +6 -6
- package/dist/server/routes/policies.js +42 -134
- package/dist/server/routes/predictions.js +35 -63
- package/dist/server/routes/processes.d.ts +5 -5
- package/dist/server/routes/processes.js +44 -134
- package/dist/server/routes/project-briefs.d.ts +6 -6
- package/dist/server/routes/project-briefs.js +41 -120
- package/dist/server/routes/recall.js +21 -44
- package/dist/server/routes/skills.d.ts +6 -6
- package/dist/server/routes/skills.js +40 -138
- package/dist/server/server-detect.d.ts +28 -0
- package/dist/server/server-detect.js +156 -0
- 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 +73 -0
- package/dist/server/tls.d.ts +6 -0
- package/dist/server/tls.js +24 -0
- package/dist/server/types.d.ts +35 -14
- package/dist/server/validation.d.ts +6 -5
- package/dist/server/validation.js +16 -34
- package/dist/server.d.ts +39 -61
- package/dist/server.js +26 -569
- package/dist/sharing/global-store.d.ts +19 -0
- package/dist/sharing/global-store.js +75 -0
- package/dist/sharing/global-sync.d.ts +6 -0
- package/dist/sharing/global-sync.js +80 -0
- package/dist/{project-merge.d.ts → sharing/project-merge.d.ts} +5 -6
- package/dist/{project-merge.js → sharing/project-merge.js} +34 -51
- package/dist/sharing/scope.d.ts +7 -0
- package/dist/{scope.js → sharing/scope.js} +5 -12
- package/dist/sharing/search-both.d.ts +60 -0
- package/dist/sharing/search-both.js +138 -0
- package/dist/sharing/share.d.ts +38 -0
- package/dist/sharing/share.js +226 -0
- package/dist/{ambient-store.d.ts → store/ambient.d.ts} +2 -2
- package/dist/{ambient-store.js → store/ambient.js} +11 -16
- package/dist/store/audit-event.d.ts +15 -17
- package/dist/store/audit-event.js +9 -16
- package/dist/{audit.d.ts → store/audit.d.ts} +29 -8
- package/dist/{audit.js → store/audit.js} +95 -18
- package/dist/{auth.d.ts → store/auth.d.ts} +19 -36
- package/dist/{auth.js → store/auth.js} +108 -99
- package/dist/store/candidates.d.ts +41 -13
- package/dist/store/candidates.js +141 -60
- package/dist/{card-detail.d.ts → store/card-detail.d.ts} +5 -4
- package/dist/{card-detail.js → store/card-detail.js} +3 -2
- package/dist/{store-cards.d.ts → store/cards.d.ts} +26 -16
- package/dist/{store-cards.js → store/cards.js} +133 -248
- package/dist/store/compactions.d.ts +78 -0
- package/dist/store/compactions.js +93 -0
- package/dist/store/conflicts.d.ts +26 -26
- package/dist/store/conflicts.js +194 -222
- 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 +88 -0
- package/dist/store/delete-and-batch.d.ts +27 -51
- package/dist/store/delete-and-batch.js +100 -92
- package/dist/{delivery-recorder.d.ts → store/delivery-recorder.d.ts} +16 -5
- package/dist/{delivery-recorder.js → store/delivery-recorder.js} +60 -38
- 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 +44 -0
- package/dist/store/doctor-reads.d.ts +16 -0
- package/dist/store/doctor-reads.js +19 -0
- package/dist/store/dormant.d.ts +105 -0
- package/dist/store/dormant.js +241 -0
- package/dist/store/embeddings/index.d.ts +36 -0
- package/dist/{embeddings.js → store/embeddings/index.js} +104 -224
- package/dist/{local-embedding.d.ts → store/embeddings/local.d.ts} +1 -1
- package/dist/{local-embedding.js → store/embeddings/local.js} +69 -75
- package/dist/store/embeddings/provider.d.ts +40 -0
- package/dist/{embedding-provider.js → store/embeddings/provider.js} +78 -91
- package/dist/store/entry-reads.d.ts +66 -63
- package/dist/store/entry-reads.js +159 -121
- package/dist/store/entry-row.d.ts +14 -37
- package/dist/store/entry-row.js +37 -45
- package/dist/store/entry-writes.d.ts +40 -17
- package/dist/store/entry-writes.js +105 -41
- 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/store/goals.d.ts +96 -0
- package/dist/store/goals.js +260 -0
- package/dist/store/graph-queue.d.ts +13 -0
- package/dist/store/graph-queue.js +70 -0
- package/dist/store/graph-reads.d.ts +41 -0
- package/dist/{graph/read.js → store/graph-reads.js} +72 -162
- package/dist/{graph/types.d.ts → store/graph-rows.d.ts} +71 -14
- package/dist/{graph/rows.js → store/graph-rows.js} +20 -12
- package/dist/store/graph-view-rows.d.ts +13 -0
- package/dist/store/graph-view-rows.js +68 -0
- package/dist/store/graph-writes.d.ts +33 -0
- package/dist/store/graph-writes.js +232 -0
- package/dist/store/half-life.d.ts +35 -0
- package/dist/store/half-life.js +75 -0
- package/dist/store/handoffs.d.ts +6 -12
- package/dist/store/handoffs.js +54 -63
- package/dist/store/index-and-stats.d.ts +14 -20
- package/dist/store/index-and-stats.js +74 -119
- 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 +3 -7
- package/dist/store/markdown.js +25 -23
- package/dist/store/mirrors.d.ts +7 -13
- package/dist/store/mirrors.js +52 -47
- package/dist/store/object-types.d.ts +189 -0
- package/dist/store/object-types.js +4 -0
- package/dist/store/open.d.ts +6 -4
- package/dist/store/open.js +30 -36
- package/dist/store/planning-fallacy-evidence.d.ts +14 -0
- package/dist/store/planning-fallacy-evidence.js +52 -0
- package/dist/store/port.d.ts +649 -0
- package/dist/store/port.js +17 -0
- package/dist/{predictions/store.d.ts → store/predictions.d.ts} +25 -52
- package/dist/{predictions/store.js → store/predictions.js} +88 -184
- package/dist/{quality-repair.js → store/quality-repair.js} +27 -57
- package/dist/{quarantine.d.ts → store/quarantine.d.ts} +8 -8
- package/dist/{quarantine.js → store/quarantine.js} +64 -22
- package/dist/store/raw-archive.d.ts +14 -0
- package/dist/{raw-archive.js → store/raw-archive.js} +20 -31
- package/dist/store/recall-scope.d.ts +78 -0
- package/dist/{recall-scope.js → store/recall-scope.js} +23 -84
- package/dist/{recall-trace.d.ts → store/recall-trace.d.ts} +13 -81
- package/dist/{recall-trace.js → store/recall-trace.js} +41 -122
- package/dist/store/rejected-values.d.ts +55 -0
- package/dist/store/rejected-values.js +150 -0
- package/dist/store/rejection.d.ts +54 -0
- package/dist/{rejection.js → store/rejection.js} +16 -67
- package/dist/store/report-reads.d.ts +6 -0
- package/dist/store/report-reads.js +29 -0
- package/dist/store/rows.d.ts +11 -22
- package/dist/store/rows.js +52 -43
- package/dist/store/rule-sql.d.ts +5 -0
- package/dist/store/rule-sql.js +37 -0
- package/dist/store/search-rows.d.ts +22 -42
- package/dist/store/search-rows.js +55 -78
- package/dist/store/sessions.d.ts +23 -49
- package/dist/store/sessions.js +96 -118
- package/dist/store/sqlite/commit-watch.d.ts +4 -0
- package/dist/store/sqlite/commit-watch.js +29 -0
- package/dist/store/sqlite/connector-events-group.d.ts +5 -0
- package/dist/store/sqlite/connector-events-group.js +50 -0
- package/dist/store/sqlite/connector-writes-group.d.ts +6 -0
- package/dist/store/sqlite/connector-writes-group.js +65 -0
- package/dist/store/sqlite/dag-reads-group.d.ts +3 -0
- package/dist/store/sqlite/dag-reads-group.js +45 -0
- package/dist/store/sqlite/entry-writes-group.d.ts +18 -0
- package/dist/store/{entry-writes-group.js → sqlite/entry-writes-group.js} +73 -60
- package/dist/store/sqlite/error-codec.d.ts +17 -0
- package/dist/store/sqlite/error-codec.js +61 -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 +29 -0
- package/dist/store/sqlite/executor.js +287 -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 +39 -0
- package/dist/store/sqlite/object-rows.d.ts +102 -0
- package/dist/store/sqlite/object-rows.js +221 -0
- package/dist/store/sqlite/objects-group.d.ts +20 -0
- package/dist/store/sqlite/objects-group.js +316 -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 +23 -0
- package/dist/store/sqlite/store.js +294 -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 +135 -0
- package/dist/store/sqlite/worker-ops.js +93 -0
- package/dist/store/sqlite/worker-store.d.ts +8 -0
- package/dist/store/sqlite/worker-store.js +79 -0
- package/dist/store/summaries.d.ts +11 -72
- package/dist/store/summaries.js +47 -186
- package/dist/{summary-dirty.d.ts → store/summary-dirty.d.ts} +1 -1
- package/dist/{summary-dirty.js → store/summary-dirty.js} +1 -1
- package/dist/store/tenant-lookup.d.ts +6 -1
- package/dist/store/tenant-lookup.js +7 -0
- package/dist/store/tenant.d.ts +11 -0
- package/dist/store/tenant.js +28 -0
- 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} +14 -51
- package/dist/{token-ledger.js → store/token-ledger.js} +51 -129
- 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 +18 -0
- package/dist/store/vector-index.d.ts +46 -0
- package/dist/store/vector-index.js +170 -0
- package/dist/{working-memory.d.ts → store/working-memory.d.ts} +11 -26
- package/dist/store/working-memory.js +118 -0
- package/dist/{yaml.d.ts → store/yaml.d.ts} +1 -5
- package/dist/{yaml.js → store/yaml.js} +2 -6
- package/dist/support-bundle.d.ts +1 -1
- package/dist/support-bundle.js +19 -37
- 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 +65 -0
- package/dist/util/anthropic-messages.d.ts +31 -0
- package/dist/util/anthropic-messages.js +58 -0
- package/dist/util/atomic-write.d.ts +4 -0
- package/dist/util/atomic-write.js +138 -0
- package/dist/util/capped-json.d.ts +6 -0
- package/dist/util/capped-json.js +46 -0
- package/dist/util/crash-handlers.d.ts +12 -0
- package/dist/util/crash-handlers.js +72 -0
- package/dist/{env.d.ts → util/env.d.ts} +27 -7
- package/dist/{env.js → util/env.js} +33 -8
- package/dist/{home-path.d.ts → util/home-path.d.ts} +2 -1
- package/dist/util/home-path.js +69 -0
- package/dist/{http-retry.d.ts → util/http-retry.d.ts} +8 -2
- package/dist/util/http-retry.js +103 -0
- 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} +7 -3
- package/dist/{log.js → util/log.js} +36 -11
- package/dist/util/real-path.d.ts +3 -0
- package/dist/util/real-path.js +15 -0
- package/dist/util/request-scope.d.ts +28 -0
- package/dist/util/request-scope.js +48 -0
- package/dist/{same-text.d.ts → util/same-text.d.ts} +1 -1
- package/dist/{secret-detect.d.ts → util/secret-detect.d.ts} +5 -30
- package/dist/{secret-detect.js → util/secret-detect.js} +17 -42
- 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 +15 -0
- package/dist/util/token-text.js +20 -0
- package/dist/{transcript-tail.d.ts → util/transcript-tail.d.ts} +2 -0
- package/dist/util/transcript-tail.js +49 -0
- package/dist/util/version.d.ts +11 -0
- package/dist/util/version.js +26 -0
- package/extensions/openclaw-plugin/index.ts +2 -6
- 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/ablation.d.ts +0 -102
- package/dist/ablation.js +0 -136
- package/dist/api.d.ts +0 -26
- package/dist/api.js +0 -29
- package/dist/audit-prune.d.ts +0 -62
- package/dist/audit-prune.js +0 -107
- package/dist/autolearn.d.ts +0 -56
- package/dist/client.d.ts +0 -48
- package/dist/compare.d.ts +0 -86
- package/dist/compare.js +0 -117
- package/dist/connectors/github/cli-impl.d.ts +0 -25
- package/dist/connectors/github/cli-impl.js +0 -227
- 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/correction-latency.d.ts +0 -36
- package/dist/customer-notes.d.ts +0 -96
- package/dist/customer-notes.js +0 -336
- package/dist/db.d.ts +0 -9
- package/dist/db.js +0 -8
- package/dist/decisions.d.ts +0 -94
- package/dist/decisions.js +0 -326
- package/dist/dedupe.d.ts +0 -75
- package/dist/dedupe.js +0 -169
- package/dist/dormant.d.ts +0 -93
- package/dist/dormant.js +0 -137
- package/dist/embedding-provider.d.ts +0 -77
- package/dist/embeddings.d.ts +0 -101
- package/dist/extract.js +0 -133
- package/dist/forward-claim-detector.d.ts +0 -36
- package/dist/forward-claim-detector.js +0 -112
- package/dist/goals.d.ts +0 -173
- package/dist/goals.js +0 -448
- package/dist/graph/read.d.ts +0 -73
- package/dist/graph/rows.d.ts +0 -45
- package/dist/graph/types.js +0 -11
- package/dist/graph-stream.d.ts +0 -70
- package/dist/graph-view.d.ts +0 -73
- package/dist/graph-view.js +0 -333
- package/dist/half-life-migration.d.ts +0 -63
- package/dist/half-life-migration.js +0 -182
- package/dist/handoff.js +0 -68
- package/dist/home-path.js +0 -24
- package/dist/http-retry.js +0 -51
- package/dist/incidents.d.ts +0 -103
- 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/memory-value-weights.d.ts +0 -19
- package/dist/memory-value.d.ts +0 -113
- package/dist/memory-value.js +0 -250
- package/dist/memory.d.ts +0 -294
- package/dist/memory.js +0 -522
- package/dist/owner-validation.d.ts +0 -42
- package/dist/owner-validation.js +0 -56
- package/dist/path-context.d.ts +0 -24
- package/dist/physics-state.d.ts +0 -39
- package/dist/policies.d.ts +0 -151
- package/dist/policies.js +0 -434
- package/dist/processes.d.ts +0 -108
- package/dist/processes.js +0 -371
- package/dist/project-briefs.d.ts +0 -128
- package/dist/project-briefs.js +0 -523
- package/dist/provenance-coverage.d.ts +0 -18
- package/dist/rate-limit.d.ts +0 -34
- package/dist/raw-archive-mirror-cleanup.d.ts +0 -20
- package/dist/raw-archive.d.ts +0 -24
- package/dist/recall-history.d.ts +0 -131
- package/dist/recall-history.js +0 -227
- package/dist/recall-scope.d.ts +0 -138
- package/dist/refine-llm.d.ts +0 -61
- package/dist/refine-llm.js +0 -167
- package/dist/reject-flow.d.ts +0 -69
- package/dist/reject-flow.js +0 -260
- package/dist/rejection.d.ts +0 -100
- package/dist/replay.d.ts +0 -41
- package/dist/replay.js +0 -122
- package/dist/rrf.d.ts +0 -43
- package/dist/rrf.js +0 -61
- package/dist/scope.d.ts +0 -14
- package/dist/server-detect.d.ts +0 -72
- package/dist/server-detect.js +0 -222
- package/dist/session-owners.d.ts +0 -7
- package/dist/session-owners.js +0 -54
- package/dist/shared.d.ts +0 -186
- package/dist/shared.js +0 -540
- package/dist/skills.d.ts +0 -101
- package/dist/skills.js +0 -367
- package/dist/store/entry-writes-group.d.ts +0 -9
- package/dist/store/vector-writes.d.ts +0 -6
- package/dist/store/vector-writes.js +0 -59
- package/dist/store-port.d.ts +0 -262
- package/dist/store-port.js +0 -178
- package/dist/tenant.d.ts +0 -25
- package/dist/tenant.js +0 -43
- package/dist/trace.d.ts +0 -34
- package/dist/transcript-tail.js +0 -48
- package/dist/version.d.ts +0 -26
- package/dist/version.js +0 -41
- package/dist/working-memory.js +0 -154
- /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/{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/{share-scrub.d.ts → capture/share-scrub.d.ts} +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/{api-errors.d.ts → core/api-errors.d.ts} +0 -0
- /package/dist/{api-errors.js → core/api-errors.js} +0 -0
- /package/dist/{memory-quality.d.ts → core/memory-quality.d.ts} +0 -0
- /package/dist/{project-remote.d.ts → core/project-remote.d.ts} +0 -0
- /package/dist/{prompt-recall.d.ts → core/prompt-recall.d.ts} +0 -0
- /package/dist/{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.js → dashboard/dashboard-types.js} +0 -0
- /package/dist/{quality-repair.d.ts → store/quality-repair.d.ts} +0 -0
- /package/dist/{escape.d.ts → util/escape.d.ts} +0 -0
- /package/dist/{escape.js → util/escape.js} +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/{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/{write-budget.d.ts → util/write-budget.d.ts} +0 -0
- /package/dist/{write-budget.js → util/write-budget.js} +0 -0
package/dist/store/sessions.js
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
import { isSharedStore } from '../config.js';
|
|
2
|
-
import { closeHippoDb } from '../db.js';
|
|
1
|
+
import { isSharedStore } from '../core/config.js';
|
|
2
|
+
import { closeHippoDb, HOOK_DB_WAIT_MS, scopedBusyWait, withWriteScope } from '../db/index.js';
|
|
3
3
|
import { raiseMinBinary } from '../db/meta.js';
|
|
4
|
-
import { originInSql } from '../project-identity.js';
|
|
5
|
-
import { assertTenantId } from '
|
|
6
|
-
import { redactSecretsStrict } from '../secret-detect.js';
|
|
7
|
-
import { TASK_OWNER_MIN_BINARY } from '../version.js';
|
|
4
|
+
import { originInSql } from '../core/project-identity.js';
|
|
5
|
+
import { assertTenantId } from './tenant.js';
|
|
6
|
+
import { redactSecretsStrict } from '../util/secret-detect.js';
|
|
7
|
+
import { TASK_OWNER_MIN_BINARY } from '../util/version.js';
|
|
8
8
|
import { rowToTaskSnapshot, rowToSessionEvent, } from './rows.js';
|
|
9
9
|
import { writeActiveTaskMirror, removeActiveTaskMirror, writeRecentSessionMirror } from './mirrors.js';
|
|
10
|
-
import { openStore } from './open.js';
|
|
10
|
+
import { onHandle, openStore } from './open.js';
|
|
11
11
|
/** All or nothing: a key missing its owner or every project name matches no row, never the tenant's newest. */
|
|
12
12
|
export function continuityWhere(key) {
|
|
13
13
|
const names = key.project.filter((n) => n !== '');
|
|
@@ -42,14 +42,15 @@ export function saveActiveTaskSnapshot(hippoRoot, tenantId, snapshot, key) {
|
|
|
42
42
|
const db = openStore(hippoRoot);
|
|
43
43
|
const now = new Date().toISOString();
|
|
44
44
|
try {
|
|
45
|
-
db
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
45
|
+
const id = withWriteScope(db, 'save_active_task', () => {
|
|
46
|
+
db.prepare(`UPDATE task_snapshots SET status = 'superseded', updated_at = ? WHERE status = 'active' AND tenant_id = ?${owned ? ` AND ${owned.sql}` : ''}`)
|
|
47
|
+
.run(now, tenantId, ...(owned?.params ?? []));
|
|
48
|
+
const inserted = insertSnapshot(db, tenantId, snapshot, now, stamp);
|
|
49
|
+
// An older binary's tenant-wide supersede would close other owners' rows, so the first owner row shuts it out.
|
|
50
|
+
if (stamp)
|
|
51
|
+
raiseMinBinary(db, TASK_OWNER_MIN_BINARY);
|
|
52
|
+
return inserted;
|
|
53
|
+
});
|
|
53
54
|
// SAFETY: row's shape matches the ten columns named in the SELECT above.
|
|
54
55
|
const row = db.prepare(`
|
|
55
56
|
SELECT id, task, summary, next_step, status, source, session_id, scope, created_at, updated_at
|
|
@@ -65,15 +66,6 @@ export function saveActiveTaskSnapshot(hippoRoot, tenantId, snapshot, key) {
|
|
|
65
66
|
writeActiveTaskMirror(hippoRoot, tenantId, loaded);
|
|
66
67
|
return loaded;
|
|
67
68
|
}
|
|
68
|
-
catch (error) {
|
|
69
|
-
try {
|
|
70
|
-
db.exec('ROLLBACK');
|
|
71
|
-
}
|
|
72
|
-
catch {
|
|
73
|
-
// Ignore nested rollback failures.
|
|
74
|
-
}
|
|
75
|
-
throw error;
|
|
76
|
-
}
|
|
77
69
|
finally {
|
|
78
70
|
closeHippoDb(db);
|
|
79
71
|
}
|
|
@@ -81,8 +73,7 @@ export function saveActiveTaskSnapshot(hippoRoot, tenantId, snapshot, key) {
|
|
|
81
73
|
export function loadActiveTaskSnapshot(hippoRoot, tenantId, key) {
|
|
82
74
|
assertTenantId('loadActiveTaskSnapshot', tenantId);
|
|
83
75
|
const owned = key ? continuityWhere(key) : null;
|
|
84
|
-
|
|
85
|
-
try {
|
|
76
|
+
return onHandle(hippoRoot, (db) => {
|
|
86
77
|
// SAFETY: row's shape matches the ten columns named in the SELECT above.
|
|
87
78
|
const row = db.prepare(`
|
|
88
79
|
SELECT id, task, summary, next_step, status, source, session_id, scope, created_at, updated_at
|
|
@@ -100,47 +91,17 @@ export function loadActiveTaskSnapshot(hippoRoot, tenantId, key) {
|
|
|
100
91
|
if (!key)
|
|
101
92
|
writeActiveTaskMirror(hippoRoot, tenantId, loaded);
|
|
102
93
|
return loaded;
|
|
103
|
-
}
|
|
104
|
-
finally {
|
|
105
|
-
closeHippoDb(db);
|
|
106
|
-
}
|
|
94
|
+
}, openStore);
|
|
107
95
|
}
|
|
108
|
-
/**
|
|
109
|
-
*
|
|
110
|
-
* a Friday-evening orphan still offers continuity on Monday morning.
|
|
111
|
-
* Exported so callers can override via `loadFreshActiveTaskSnapshot`'s
|
|
112
|
-
* `opts.maxAgeMs`; deliberately no env knob (Simplicity First).
|
|
113
|
-
*/
|
|
96
|
+
/** Default freshness bound for AMBIENT active-task-snapshot reads: 72h rather than 48h so a Friday-evening orphan still offers continuity on Monday;
|
|
97
|
+
* override via `loadFreshActiveTaskSnapshot`'s `opts.maxAgeMs`; deliberately no env knob. */
|
|
114
98
|
export const SNAPSHOT_AMBIENT_MAX_AGE_MS = 72 * 60 * 60 * 1000;
|
|
115
|
-
/** A usable session id: non-null, non-empty string
|
|
116
|
-
* inline `typeof` check) so the owner-match rule in
|
|
117
|
-
* `loadFreshActiveTaskSnapshot` states its contract once. */
|
|
99
|
+
/** A usable session id: non-null, non-empty string; named so the owner-match rule in `loadFreshActiveTaskSnapshot` states its contract once. */
|
|
118
100
|
function isNonEmptySessionId(value) {
|
|
119
101
|
return typeof value === 'string' && value.length > 0;
|
|
120
102
|
}
|
|
121
|
-
/**
|
|
122
|
-
*
|
|
123
|
-
* hook context, MCP recall block), so snapshots expire. A
|
|
124
|
-
* snapshot written by `hippo pre-compact` has no death path tied to the
|
|
125
|
-
* session that owns it, so an orphaned row would otherwise inject into
|
|
126
|
-
* every prompt of every later session forever. Wraps `loadActiveTaskSnapshot`
|
|
127
|
-
* (unchanged, still the source of truth for explicit continuity surfaces),
|
|
128
|
-
* then applies, in order:
|
|
129
|
-
*
|
|
130
|
-
* 1. Owner match — ONLY when both `opts.sessionId` and the snapshot's
|
|
131
|
-
* `session_id` are non-null, non-empty strings and strictly equal
|
|
132
|
-
* (`===`). Owner reads are unbounded: the session that owns the snapshot
|
|
133
|
-
* can always see its own working state, regardless of age.
|
|
134
|
-
* 2. Age check — everything else, including absent-vs-absent ids. A
|
|
135
|
-
* null/undefined/empty id on EITHER side never counts as an owner match;
|
|
136
|
-
* it falls through here instead. (`runPreCompact` can legitimately save a
|
|
137
|
-
* snapshot with `session_id = null`; a null-equals-null "match" would
|
|
138
|
-
* reopen indefinite ambient injection for exactly those rows.) Returns
|
|
139
|
-
* the snapshot only when `age(updated_at) <= maxAgeMs` (default
|
|
140
|
-
* `SNAPSHOT_AMBIENT_MAX_AGE_MS`); otherwise null.
|
|
141
|
-
*
|
|
142
|
-
* No SQL change — age derives from the existing `updated_at` column.
|
|
143
|
-
*/
|
|
103
|
+
/** Bounded read for AMBIENT snapshot surfaces so orphaned snapshots expire. The owner (both session ids non-empty and `===`) always sees its own state;
|
|
104
|
+
* all others, null ids included (null === null is no match), get it only if age(updated_at) <= maxAgeMs (default `SNAPSHOT_AMBIENT_MAX_AGE_MS`), else null. */
|
|
144
105
|
export function loadFreshActiveTaskSnapshot(hippoRoot, tenantId, opts = {}, key) {
|
|
145
106
|
return freshActiveSnapshot(loadActiveTaskSnapshot(hippoRoot, tenantId, key), opts);
|
|
146
107
|
}
|
|
@@ -178,15 +139,8 @@ export function clearActiveTaskSnapshot(hippoRoot, tenantId, clearedStatus = 'cl
|
|
|
178
139
|
closeHippoDb(db);
|
|
179
140
|
}
|
|
180
141
|
}
|
|
181
|
-
/**
|
|
182
|
-
*
|
|
183
|
-
* session-end death path.
|
|
184
|
-
* Only one `active` row exists per tenant (per owner and project when keyed) in practice (supersession happens
|
|
185
|
-
* at save), but the WHERE clause scopes on `session_id` too — not just
|
|
186
|
-
* `status='active' AND tenant_id=?` — so an ending session can never close a
|
|
187
|
-
* different, newer session's active snapshot. Returns the number of rows
|
|
188
|
-
* closed (0 when no active row is owned by `sessionId`).
|
|
189
|
-
*/
|
|
142
|
+
/** Close the `active` task snapshot(s) owned by `sessionId` at session end; the WHERE scopes on `session_id` too so an ending session can never close a
|
|
143
|
+
* newer session's snapshot. Returns the number of rows closed. */
|
|
190
144
|
export function closeTaskSnapshotsForSession(hippoRoot, tenantId, sessionId, status = 'session-ended', key) {
|
|
191
145
|
assertTenantId('closeTaskSnapshotsForSession', tenantId);
|
|
192
146
|
if (key)
|
|
@@ -202,39 +156,45 @@ export function closeTaskSnapshotsForSession(hippoRoot, tenantId, sessionId, sta
|
|
|
202
156
|
closeHippoDb(db);
|
|
203
157
|
}
|
|
204
158
|
}
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
const db = openStore(hippoRoot);
|
|
208
|
-
const now = new Date().toISOString();
|
|
209
|
-
// Scope is stored as given; default-deny in api.recall + cmdRecall
|
|
210
|
-
// continuity reads applies to slack:private:* and 'unknown:legacy' rows.
|
|
211
|
-
try {
|
|
212
|
-
const result = db.prepare(`
|
|
159
|
+
function insertSessionEventRow(db, tenantId, event, now) {
|
|
160
|
+
const result = db.prepare(`
|
|
213
161
|
INSERT INTO session_events(session_id, task, event_type, content, source, scope, metadata_json, tenant_id, created_at)
|
|
214
162
|
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
215
163
|
`).run(event.session_id, event.task ?? null, event.event_type, event.content, event.source ?? 'cli', event.scope ?? null, JSON.stringify(event.metadata ?? {}), tenantId, now);
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
164
|
+
return Number(result.lastInsertRowid ?? 0);
|
|
165
|
+
}
|
|
166
|
+
function reloadSessionEvent(db, id) {
|
|
167
|
+
// SAFETY: row's shape matches the nine columns named in the SELECT below.
|
|
168
|
+
const row = db.prepare(`
|
|
220
169
|
SELECT id, session_id, task, event_type, content, source, scope, metadata_json, created_at
|
|
221
170
|
FROM session_events
|
|
222
171
|
WHERE id = ?
|
|
223
172
|
`).get(id);
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
173
|
+
if (!row) {
|
|
174
|
+
throw new Error('Failed to reload saved session event');
|
|
175
|
+
}
|
|
176
|
+
return rowToSessionEvent(row);
|
|
177
|
+
}
|
|
178
|
+
function recentSessionEventsOldestFirst(db, tenantId, sessionId, limit) {
|
|
179
|
+
// SAFETY: recentRows' shape matches the nine columns named in the SELECT below.
|
|
180
|
+
const recentRows = db.prepare(`
|
|
231
181
|
SELECT id, session_id, task, event_type, content, source, scope, metadata_json, created_at
|
|
232
182
|
FROM session_events
|
|
233
183
|
WHERE session_id = ? AND tenant_id = ?
|
|
234
184
|
ORDER BY created_at DESC, id DESC
|
|
235
185
|
LIMIT ?
|
|
236
|
-
`).all(
|
|
237
|
-
|
|
186
|
+
`).all(sessionId, tenantId, limit);
|
|
187
|
+
return recentRows.map(rowToSessionEvent).reverse();
|
|
188
|
+
}
|
|
189
|
+
export function appendSessionEvent(hippoRoot, tenantId, event) {
|
|
190
|
+
assertTenantId('appendSessionEvent', tenantId);
|
|
191
|
+
const db = openStore(hippoRoot);
|
|
192
|
+
const now = new Date().toISOString();
|
|
193
|
+
// Scope is stored as given; default-deny in api.recall + cmdRecall
|
|
194
|
+
// continuity reads applies to slack:private:* and 'unknown:legacy' rows.
|
|
195
|
+
try {
|
|
196
|
+
const loaded = reloadSessionEvent(db, insertSessionEventRow(db, tenantId, event, now));
|
|
197
|
+
const recent = recentSessionEventsOldestFirst(db, tenantId, loaded.session_id, 20);
|
|
238
198
|
writeRecentSessionMirror(hippoRoot, tenantId, recent);
|
|
239
199
|
return loaded;
|
|
240
200
|
}
|
|
@@ -244,8 +204,7 @@ export function appendSessionEvent(hippoRoot, tenantId, event) {
|
|
|
244
204
|
}
|
|
245
205
|
export function listSessionEvents(hippoRoot, tenantId, options = {}) {
|
|
246
206
|
assertTenantId('listSessionEvents', tenantId);
|
|
247
|
-
|
|
248
|
-
try {
|
|
207
|
+
return onHandle(hippoRoot, (db) => {
|
|
249
208
|
const clauses = ['tenant_id = ?'];
|
|
250
209
|
const params = [tenantId];
|
|
251
210
|
if (options.session_id) {
|
|
@@ -269,19 +228,12 @@ export function listSessionEvents(hippoRoot, tenantId, options = {}) {
|
|
|
269
228
|
LIMIT ?
|
|
270
229
|
`).all(...params);
|
|
271
230
|
return rows.map(rowToSessionEvent).reverse();
|
|
272
|
-
}
|
|
273
|
-
finally {
|
|
274
|
-
closeHippoDb(db);
|
|
275
|
-
}
|
|
231
|
+
}, openStore);
|
|
276
232
|
}
|
|
277
|
-
/**
|
|
278
|
-
* Return session_ids with a `session_complete` event newer than `sinceMs`.
|
|
279
|
-
* Used by the sleep auto-promotion pass to bound scanning to a fixed window.
|
|
280
|
-
*/
|
|
233
|
+
/** Session_ids with a `session_complete` event newer than `sinceMs`; bounds the sleep auto-promotion scan to a fixed window. */
|
|
281
234
|
export function findPromotableSessions(hippoRoot, tenantId, sinceMs) {
|
|
282
235
|
assertTenantId('findPromotableSessions', tenantId);
|
|
283
|
-
|
|
284
|
-
try {
|
|
236
|
+
return onHandle(hippoRoot, (db) => {
|
|
285
237
|
// SAFETY: rows' shape matches the single `session_id` column selected
|
|
286
238
|
// above.
|
|
287
239
|
const rows = db.prepare(`
|
|
@@ -289,28 +241,54 @@ export function findPromotableSessions(hippoRoot, tenantId, sinceMs) {
|
|
|
289
241
|
WHERE event_type = 'session_complete' AND created_at >= ? AND tenant_id = ?
|
|
290
242
|
`).all(new Date(sinceMs).toISOString(), tenantId);
|
|
291
243
|
return rows;
|
|
292
|
-
}
|
|
293
|
-
finally {
|
|
294
|
-
closeHippoDb(db);
|
|
295
|
-
}
|
|
244
|
+
}, openStore);
|
|
296
245
|
}
|
|
297
|
-
/**
|
|
298
|
-
* Idempotency guard — true if a trace-layer memory with this source_session_id
|
|
299
|
-
* already exists.
|
|
300
|
-
*/
|
|
246
|
+
/** Idempotency guard: true if a trace-layer memory with this source_session_id already exists. */
|
|
301
247
|
export function traceExistsForSession(hippoRoot, tenantId, session_id) {
|
|
302
248
|
assertTenantId('traceExistsForSession', tenantId);
|
|
303
|
-
|
|
304
|
-
try {
|
|
249
|
+
return onHandle(hippoRoot, (db) => {
|
|
305
250
|
const row = db.prepare(`
|
|
306
251
|
SELECT 1 FROM memories
|
|
307
252
|
WHERE source_session_id = ? AND layer = 'trace' AND tenant_id = ?
|
|
308
253
|
LIMIT 1
|
|
309
254
|
`).get(session_id, tenantId);
|
|
310
255
|
return !!row;
|
|
311
|
-
}
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
256
|
+
}, openStore);
|
|
257
|
+
}
|
|
258
|
+
/** The owner a session id is bound to, or null. */
|
|
259
|
+
function selectSessionOwnerAt(db, tenantId, sessionId) {
|
|
260
|
+
// SAFETY: the SELECT names exactly this one TEXT column.
|
|
261
|
+
const row = db.prepare(`SELECT owner_subject FROM session_owners WHERE tenant_id = ? AND session_id = ?`).get(tenantId, sessionId);
|
|
262
|
+
return row?.owner_subject ?? null;
|
|
263
|
+
}
|
|
264
|
+
/** Binds `sessionId` to `owner` unless a binding exists; the count is 1 when this call bound it. */
|
|
265
|
+
function insertSessionOwnerAt(db, tenantId, sessionId, owner, createdAt) {
|
|
266
|
+
const result = db.prepare(`INSERT OR IGNORE INTO session_owners(tenant_id, session_id, owner_subject, created_at) VALUES (?, ?, ?, ?)`)
|
|
267
|
+
.run(tenantId, sessionId, owner, createdAt);
|
|
268
|
+
return Number(result.changes ?? 0);
|
|
269
|
+
}
|
|
270
|
+
// SHORTCUT: no created_at index, so each first bind scans the table; add one past a few hundred thousand rows.
|
|
271
|
+
/** Drops bindings created before `cutoffIso`. */
|
|
272
|
+
function deleteSessionOwnersBeforeAt(db, cutoffIso) {
|
|
273
|
+
db.prepare(`DELETE FROM session_owners WHERE created_at < ?`).run(cutoffIso);
|
|
274
|
+
}
|
|
275
|
+
/** Binds under the write lock and returns the stored owner, which is not `owner` when a concurrent first bind won. */
|
|
276
|
+
function insertSessionOwner(db, binding) {
|
|
277
|
+
const { tenantId, sessionId, owner, retentionMs } = binding;
|
|
278
|
+
withWriteScope(db, 'bind_session_owner', () => {
|
|
279
|
+
const bound = insertSessionOwnerAt(db, tenantId, sessionId, owner, new Date().toISOString());
|
|
280
|
+
// An older binary supersedes across owners, so the first binding shuts it out in the same transaction.
|
|
281
|
+
if (bound === 1)
|
|
282
|
+
raiseMinBinary(db, TASK_OWNER_MIN_BINARY);
|
|
283
|
+
// Pruned on write, as the failure log is; a pruned session id is a UUID no other caller knows.
|
|
284
|
+
deleteSessionOwnersBeforeAt(db, new Date(Date.now() - retentionMs).toISOString());
|
|
285
|
+
}, { busyWaitMs: scopedBusyWait() ?? HOOK_DB_WAIT_MS });
|
|
286
|
+
// Re-read, since a concurrent first bind may have won the INSERT OR IGNORE.
|
|
287
|
+
return selectSessionOwnerAt(db, tenantId, sessionId);
|
|
288
|
+
}
|
|
289
|
+
/** The owner stored for the session id, binding `binding.owner` first when none is stored. */
|
|
290
|
+
export function sessionOwnerOrBind(hippoRoot, binding) {
|
|
291
|
+
// A bound session is the common case after the first prompt, so it must not take the write lock.
|
|
292
|
+
return onHandle(hippoRoot, (db) => selectSessionOwnerAt(db, binding.tenantId, binding.sessionId) ?? insertSessionOwner(db, binding));
|
|
315
293
|
}
|
|
316
294
|
//# sourceMappingURL=sessions.js.map
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
const ROLLS_BACK_PART = /^\s*ROLLBACK\s+TO\b/i;
|
|
2
|
+
// After any of these the connection may be in autocommit, where a statement prepared earlier commits on its own.
|
|
3
|
+
const ENDS_TRANSACTION = /^\s*(?:COMMIT|END|RELEASE|ROLLBACK)\b/i;
|
|
4
|
+
// Reads, and the statements that open a transaction: none makes a change durable on its own.
|
|
5
|
+
const NEVER_COMMITS = /^\s*(?:SELECT|BEGIN|SAVEPOINT|PRAGMA|EXPLAIN)\b/i;
|
|
6
|
+
/** Whether running `sql` on `db` can make a change durable. Anything the patterns do not know counts as a commit. */
|
|
7
|
+
function mayCommit(db, sql) {
|
|
8
|
+
if (ROLLS_BACK_PART.test(sql))
|
|
9
|
+
return false;
|
|
10
|
+
if (ENDS_TRANSACTION.test(sql))
|
|
11
|
+
return true;
|
|
12
|
+
return db.isTransaction !== true && !NEVER_COMMITS.test(sql);
|
|
13
|
+
}
|
|
14
|
+
/** Calls `mark` before `db` is handed any statement that may commit. */
|
|
15
|
+
export function watchCommits(db, mark) {
|
|
16
|
+
const exec = db.exec.bind(db);
|
|
17
|
+
const prepare = db.prepare.bind(db);
|
|
18
|
+
db.exec = (sql) => {
|
|
19
|
+
if (mayCommit(db, sql))
|
|
20
|
+
mark();
|
|
21
|
+
exec(sql);
|
|
22
|
+
};
|
|
23
|
+
db.prepare = (sql) => {
|
|
24
|
+
if (mayCommit(db, sql))
|
|
25
|
+
mark();
|
|
26
|
+
return prepare(sql);
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=commit-watch.js.map
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { ConnectorEvents, Sync } from '../port.js';
|
|
2
|
+
export declare function sqliteConnectorEvents(hippoRoot: string): Sync<ConnectorEvents>;
|
|
3
|
+
/** The group as a served store answers it: each call runs at once and resolves through a Promise, so a throw rejects as another store's would. */
|
|
4
|
+
export declare function servedConnectorEvents(sync: Sync<ConnectorEvents>): ConnectorEvents;
|
|
5
|
+
//# sourceMappingURL=connector-events-group.d.ts.map
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
// hippo.db's half of the ConnectorEvents store group: each call on a handle of its own.
|
|
2
|
+
import { archiveDeletedArtifact, eventSeenAt, githubRouting, insertGitHubDlq, logEvent, seenEvent } from '../connectors/github.js';
|
|
3
|
+
import { insertSlackDlq, markSlackEventSeen, rawMemoryIdForArtifactAt, slackEventRecord, slackEventSeenAt, slackTeamRoute } from '../connectors/slack.js';
|
|
4
|
+
import { onHandle } from '../open.js';
|
|
5
|
+
function eventRecord(hippoRoot, event) {
|
|
6
|
+
if (event.connector === 'slack')
|
|
7
|
+
return slackEventRecord(hippoRoot, event.eventId);
|
|
8
|
+
const logged = seenEvent(hippoRoot, event.idempotencyKey);
|
|
9
|
+
return logged ? { seen: true, memoryId: logged.memoryId } : { seen: false };
|
|
10
|
+
}
|
|
11
|
+
function markEventSeen(hippoRoot, event) {
|
|
12
|
+
if (event.connector === 'slack')
|
|
13
|
+
return markSlackEventSeen(hippoRoot, event.eventId, null);
|
|
14
|
+
const { idempotencyKey, deliveryId, eventName } = event;
|
|
15
|
+
logEvent(hippoRoot, { idempotencyKey, deliveryId, eventName, memoryId: null });
|
|
16
|
+
}
|
|
17
|
+
function deletionTarget(hippoRoot, { event, artifactRef, tenantId }) {
|
|
18
|
+
return onHandle(hippoRoot, (db) => {
|
|
19
|
+
const seen = event.connector === 'slack' ? slackEventSeenAt(db, event.eventId) : eventSeenAt(db, event.idempotencyKey);
|
|
20
|
+
return seen ? { seen: true } : { seen: false, memoryId: rawMemoryIdForArtifactAt(db, artifactRef, tenantId) };
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
function archiveArtifact(hippoRoot, { tenantId, actor, artifactRef, reason, event }) {
|
|
24
|
+
const { idempotencyKey, deliveryId, eventName } = event;
|
|
25
|
+
return archiveDeletedArtifact(hippoRoot, { tenantId, artifactRef, idempotencyKey, deliveryId, eventName, reason, who: actor });
|
|
26
|
+
}
|
|
27
|
+
export function sqliteConnectorEvents(hippoRoot) {
|
|
28
|
+
return {
|
|
29
|
+
eventRecord: (event) => eventRecord(hippoRoot, event),
|
|
30
|
+
markEventSeen: (event) => markEventSeen(hippoRoot, event),
|
|
31
|
+
deletionTarget: (lookup) => deletionTarget(hippoRoot, lookup),
|
|
32
|
+
archiveDeletedArtifact: (archive) => archiveArtifact(hippoRoot, archive),
|
|
33
|
+
slackTeamRoute: (teamId) => slackTeamRoute(hippoRoot, teamId),
|
|
34
|
+
githubRouting: (query) => githubRouting(hippoRoot, query),
|
|
35
|
+
parkDeadLetter: (letter) => (letter.connector === 'slack' ? insertSlackDlq(hippoRoot, letter) : insertGitHubDlq(hippoRoot, letter)),
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
/** The group as a served store answers it: each call runs at once and resolves through a Promise, so a throw rejects as another store's would. */
|
|
39
|
+
export function servedConnectorEvents(sync) {
|
|
40
|
+
return {
|
|
41
|
+
eventRecord: async (event) => sync.eventRecord(event),
|
|
42
|
+
markEventSeen: async (event) => sync.markEventSeen(event),
|
|
43
|
+
deletionTarget: async (lookup) => sync.deletionTarget(lookup),
|
|
44
|
+
archiveDeletedArtifact: async (archive) => sync.archiveDeletedArtifact(archive),
|
|
45
|
+
slackTeamRoute: async (teamId) => sync.slackTeamRoute(teamId),
|
|
46
|
+
githubRouting: async (query) => sync.githubRouting(query),
|
|
47
|
+
parkDeadLetter: async (letter) => sync.parkDeadLetter(letter),
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=connector-events-group.js.map
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { ConnectorWrites, Sync } from '../port.js';
|
|
2
|
+
/** Each call on its own handle; the mirror follows the commit, so a duplicate or a rolled-back write leaves none. */
|
|
3
|
+
export declare function sqliteConnectorWrites(hippoRoot: string): Sync<ConnectorWrites>;
|
|
4
|
+
/** The group as a served store answers it: each call runs at once and resolves through a Promise, so a throw rejects as another store's would. */
|
|
5
|
+
export declare function servedConnectorWrites(sync: Sync<ConnectorWrites>): ConnectorWrites;
|
|
6
|
+
//# sourceMappingURL=connector-writes-group.d.ts.map
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { eventMemoryAt, logEventAt } from '../connectors/github.js';
|
|
2
|
+
import { markSlackEventSeenAt, slackEventMemoryAt } from '../connectors/slack.js';
|
|
3
|
+
import { stampOriginProject } from '../entry-row.js';
|
|
4
|
+
import { writeEntryMirrors } from '../entry-writes.js';
|
|
5
|
+
import { onHandle, openStore } from '../open.js';
|
|
6
|
+
import { recordQuarantine } from '../quarantine.js';
|
|
7
|
+
import { archiveRawAt, writeInOwnTenant } from './entry-writes-group.js';
|
|
8
|
+
/** Unwinds a write whose event key is already logged. Caught in this file, so no caller ever sees it. */
|
|
9
|
+
class EventAlreadyLogged extends Error {
|
|
10
|
+
}
|
|
11
|
+
/** False when the key was logged before: the insert ignores a taken key, so the first writer's row stays. */
|
|
12
|
+
function logEvent(db, event, memoryId) {
|
|
13
|
+
if (event.connector === 'slack')
|
|
14
|
+
return markSlackEventSeenAt(db, event.eventId, memoryId);
|
|
15
|
+
const { idempotencyKey, deliveryId, eventName } = event;
|
|
16
|
+
return logEventAt(db, { idempotencyKey, deliveryId, eventName, memoryId });
|
|
17
|
+
}
|
|
18
|
+
function loggedMemory(db, event) {
|
|
19
|
+
return event.connector === 'slack' ? slackEventMemoryAt(db, event.eventId) : eventMemoryAt(db, event.idempotencyKey);
|
|
20
|
+
}
|
|
21
|
+
/** The record, then the log row, go in after the memory row and ahead of its remember row, as a second store must order them. */
|
|
22
|
+
function writeWithCompanions(db, { entry, actor, event, quarantine }) {
|
|
23
|
+
writeInOwnTenant(db, entry, actor, (handle, memoryId) => {
|
|
24
|
+
if (quarantine)
|
|
25
|
+
recordQuarantine(handle, { tenantId: entry.tenantId, memoryId, originalScope: quarantine.originalScope, reason: quarantine.reason, actor });
|
|
26
|
+
if (event && !logEvent(handle, event, memoryId))
|
|
27
|
+
throw new EventAlreadyLogged();
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
function writeOnce(db, write) {
|
|
31
|
+
try {
|
|
32
|
+
writeWithCompanions(db, write);
|
|
33
|
+
return { outcome: 'written' };
|
|
34
|
+
}
|
|
35
|
+
catch (err) {
|
|
36
|
+
if (!(err instanceof EventAlreadyLogged) || !write.event)
|
|
37
|
+
throw err;
|
|
38
|
+
// The scope has unwound, so this reads the winner's committed row.
|
|
39
|
+
return { outcome: 'duplicate', memoryId: loggedMemory(db, write.event) };
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
/** Each call on its own handle; the mirror follows the commit, so a duplicate or a rolled-back write leaves none. */
|
|
43
|
+
export function sqliteConnectorWrites(hippoRoot) {
|
|
44
|
+
return {
|
|
45
|
+
writeConnectorEntry(write) {
|
|
46
|
+
const entry = stampOriginProject(hippoRoot, write.entry);
|
|
47
|
+
const result = onHandle(hippoRoot, (db) => writeOnce(db, { ...write, entry }), openStore);
|
|
48
|
+
if (result.outcome === 'written')
|
|
49
|
+
writeEntryMirrors(hippoRoot, entry);
|
|
50
|
+
return result;
|
|
51
|
+
},
|
|
52
|
+
archiveConnectorEntry(archive) {
|
|
53
|
+
// The log write's answer is unread: a key logged before keeps its row and the archive stands.
|
|
54
|
+
return archiveRawAt(hippoRoot, archive, (db, archivedId) => { logEvent(db, archive.event, archivedId); });
|
|
55
|
+
},
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
/** The group as a served store answers it: each call runs at once and resolves through a Promise, so a throw rejects as another store's would. */
|
|
59
|
+
export function servedConnectorWrites(sync) {
|
|
60
|
+
return {
|
|
61
|
+
writeConnectorEntry: async (write) => sync.writeConnectorEntry(write),
|
|
62
|
+
archiveConnectorEntry: async (archive) => sync.archiveConnectorEntry(archive),
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=connector-writes-group.js.map
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { pagedDescendants } from '../descendant-page.js';
|
|
2
|
+
import { countSessionRawMemories, loadSessionRawMemories, selectChildrenByParent, selectEntriesByIds } from '../entry-reads.js';
|
|
3
|
+
import { onHandle, openStore } from '../open.js';
|
|
4
|
+
export function sqliteDagReads(hippoRoot) {
|
|
5
|
+
return {
|
|
6
|
+
sessionRawEntries({ tenantId, sessionId, cap, origins }) {
|
|
7
|
+
return loadSessionRawMemories(hippoRoot, sessionId, tenantId, cap, origins);
|
|
8
|
+
},
|
|
9
|
+
sessionRawCount({ tenantId, sessionId, scope, ownScope, origins }) {
|
|
10
|
+
return countSessionRawMemories(hippoRoot, sessionId, tenantId, scope, ownScope, origins);
|
|
11
|
+
},
|
|
12
|
+
summaryWithDescendants(tenantId, id, walk) {
|
|
13
|
+
return onHandle(hippoRoot, (db) => summaryWithDescendantsAt(db, tenantId, id, walk), openStore);
|
|
14
|
+
},
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
// dag_parent_id is not unique to a tree, so `seen` keeps a mislinked row from being listed twice or walked in a loop.
|
|
18
|
+
function summaryWithDescendantsAt(db, tenantId, id, { depth, admit, page }) {
|
|
19
|
+
const summary = selectEntriesByIds(db, [id], tenantId).get(id);
|
|
20
|
+
if (!summary)
|
|
21
|
+
return null;
|
|
22
|
+
if (page)
|
|
23
|
+
return pagedDescendants(db, { tenantId, summary, depth, page }, admit(summary));
|
|
24
|
+
const levels = [];
|
|
25
|
+
const seen = new Set([id]);
|
|
26
|
+
let parents = admit(summary) ? [id] : [];
|
|
27
|
+
for (let level = 0; level < depth && parents.length > 0; level++) {
|
|
28
|
+
const childrenOf = selectChildrenByParent(db, parents, tenantId);
|
|
29
|
+
const admitted = [];
|
|
30
|
+
for (const parentId of parents) {
|
|
31
|
+
for (const child of childrenOf.get(parentId) ?? []) {
|
|
32
|
+
if (seen.has(child.id) || !admit(child))
|
|
33
|
+
continue;
|
|
34
|
+
seen.add(child.id);
|
|
35
|
+
admitted.push(child);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
if (admitted.length === 0)
|
|
39
|
+
break;
|
|
40
|
+
levels.push(admitted);
|
|
41
|
+
parents = admitted.map((row) => row.id);
|
|
42
|
+
}
|
|
43
|
+
return { summary, levels };
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=dag-reads-group.js.map
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { type DatabaseSyncLike } from '../../db/index.js';
|
|
2
|
+
import { type MemoryEntry } from '../../core/memory.js';
|
|
3
|
+
import { type ArchiveOpts } from '../raw-archive.js';
|
|
4
|
+
import type { EntryWrite, EntryWrites, OutcomeWrite, RawArchive, Sync } from '../port.js';
|
|
5
|
+
import { type WriteEntryOptions } from '../entry-writes.js';
|
|
6
|
+
/** Each call on its own handle; mirrors and the forgotten counter follow the commit, so a rolled-back write leaves neither. */
|
|
7
|
+
export declare function sqliteEntryWrites(hippoRoot: string): Sync<EntryWrites>;
|
|
8
|
+
/** A store-side hook writes on the row's handle inside its write scope, so its throw undoes the row. */
|
|
9
|
+
export declare function writeEntryAt(hippoRoot: string, { entry, actor }: EntryWrite, afterWrite?: WriteEntryOptions['afterWrite']): void;
|
|
10
|
+
/** A trace link follows the commit on the same handle and names only the ids applied, so a rolled-back outcome leaves none. */
|
|
11
|
+
export declare function applyOutcomeAt(hippoRoot: string, outcome: OutcomeWrite, traceId?: number): string[];
|
|
12
|
+
/** Reach is checked inside the archive's write scope. A store-side hook writes on the same handle inside that scope, so its throw undoes the archive. */
|
|
13
|
+
export declare function archiveRawAt(hippoRoot: string, archive: RawArchive, afterArchive?: ArchiveOpts['afterArchive']): string;
|
|
14
|
+
/** The refusal row lands after `write` has rolled back, in a fresh implicit transaction the aborted one cannot undo. */
|
|
15
|
+
export declare function auditingRefusal<T>(db: DatabaseSyncLike, actor: string, write: () => T): T;
|
|
16
|
+
/** writeEntryAt on the caller's handle, so a sibling group can read on it after the scope has unwound. */
|
|
17
|
+
export declare function writeInOwnTenant(db: DatabaseSyncLike, entry: MemoryEntry, actor: string, afterWrite?: WriteEntryOptions['afterWrite']): void;
|
|
18
|
+
//# sourceMappingURL=entry-writes-group.d.ts.map
|