hippo-memory 2.0.0 → 2.1.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/dist/agent-memories/apply.d.ts +7 -5
- package/dist/agent-memories/apply.js +66 -39
- package/dist/agent-memories/claude-code.d.ts +8 -2
- package/dist/agent-memories/claude-code.js +26 -7
- package/dist/agent-memories/copilot.js +2 -1
- package/dist/agent-memories/files.js +2 -1
- package/dist/agent-memories/legacy.d.ts +6 -3
- package/dist/agent-memories/legacy.js +35 -14
- package/dist/agent-memories/markdown.d.ts +3 -1
- package/dist/agent-memories/markdown.js +3 -1
- package/dist/agent-memories/openclaw.js +5 -2
- package/dist/agent-memories/plan.js +11 -1
- package/dist/agent-memories/project-folds.js +2 -1
- package/dist/agent-memories/report.d.ts +4 -1
- package/dist/agent-memories/report.js +43 -9
- package/dist/agent-memories/source.d.ts +8 -2
- package/dist/agent-memories/source.js +11 -3
- package/dist/agent-memories/sync.d.ts +7 -2
- package/dist/agent-memories/sync.js +141 -101
- package/dist/api/assemble.d.ts +6 -4
- package/dist/api/assemble.js +11 -6
- package/dist/api/{audit.d.ts → auth/audit.d.ts} +18 -16
- package/dist/api/{audit.js → auth/audit.js} +11 -11
- package/dist/api/{auth.d.ts → auth/auth.d.ts} +19 -15
- package/dist/api/{auth.js → auth/auth.js} +46 -29
- package/dist/api/{quarantine.d.ts → auth/quarantine.d.ts} +8 -7
- package/dist/api/{quarantine.js → auth/quarantine.js} +8 -8
- package/dist/api/auth/session-owners.d.ts +10 -0
- package/dist/api/auth/session-owners.js +35 -0
- package/dist/api/availability.d.ts +3 -1
- package/dist/api/availability.js +3 -1
- package/dist/api/busy.d.ts +2 -0
- package/dist/api/busy.js +2 -0
- package/dist/api/cli-surface.d.ts +6 -0
- package/dist/api/cli-surface.js +6 -0
- package/dist/api/config-of.d.ts +5 -0
- package/dist/api/config-of.js +6 -0
- package/dist/api/context-auto.d.ts +4 -1
- package/dist/api/context-auto.js +10 -2
- package/dist/api/context-render.js +14 -7
- package/dist/api/context-select.d.ts +4 -1
- package/dist/api/context-select.js +23 -14
- package/dist/api/context-types.d.ts +38 -12
- package/dist/api/context.d.ts +8 -5
- package/dist/api/context.js +112 -57
- package/dist/api/continuity.d.ts +24 -21
- package/dist/api/continuity.js +18 -20
- package/dist/api/correction-latency.d.ts +3 -1
- package/dist/api/correction-latency.js +3 -1
- package/dist/api/error-reply.d.ts +4 -1
- package/dist/api/error-reply.js +12 -3
- package/dist/api/index.d.ts +39 -23
- package/dist/api/index.js +21 -23
- package/dist/api/instruction-detect.d.ts +4 -1
- package/dist/api/instruction-detect.js +75 -20
- package/dist/api/ledger-db.d.ts +15 -11
- package/dist/api/ledger-db.js +21 -23
- package/dist/api/memories/conflicts.d.ts +33 -0
- package/dist/api/memories/conflicts.js +67 -0
- package/dist/api/{forget.d.ts → memories/forget.d.ts} +11 -9
- package/dist/api/{forget.js → memories/forget.js} +22 -15
- package/dist/api/memories/memories.d.ts +27 -0
- package/dist/api/{memories.js → memories/memories.js} +16 -21
- package/dist/api/memories/outcome.d.ts +22 -0
- package/dist/api/{outcome.js → memories/outcome.js} +14 -8
- package/dist/api/memories/promote.d.ts +40 -0
- package/dist/api/{promote.js → memories/promote.js} +35 -22
- package/dist/api/memories/refine.d.ts +10 -0
- package/dist/api/memories/refine.js +12 -0
- package/dist/api/{remember-local.d.ts → memories/remember-local.d.ts} +16 -11
- package/dist/api/{remember-local.js → memories/remember-local.js} +34 -20
- package/dist/api/{remember.d.ts → memories/remember.d.ts} +19 -13
- package/dist/api/{remember.js → memories/remember.js} +42 -26
- package/dist/api/objects/cards.d.ts +39 -0
- package/dist/api/{cards.js → objects/cards.js} +12 -14
- package/dist/api/{drill-down.d.ts → objects/drill-down.d.ts} +12 -10
- package/dist/api/{drill-down.js → objects/drill-down.js} +7 -8
- package/dist/api/objects/goals.d.ts +18 -0
- package/dist/api/{goals.js → objects/goals.js} +12 -12
- package/dist/api/objects/graph.d.ts +11 -0
- package/dist/api/objects/graph.js +16 -0
- package/dist/api/objects/objects.d.ts +9 -0
- package/dist/api/{objects.js → objects/objects.js} +2 -4
- package/dist/api/objects/predictions.d.ts +11 -0
- package/dist/api/{predictions.js → objects/predictions.js} +7 -6
- package/dist/api/{projects.d.ts → objects/projects.d.ts} +8 -5
- package/dist/api/{projects.js → objects/projects.js} +8 -4
- package/dist/api/pilot-arm.d.ts +8 -4
- package/dist/api/pilot-arm.js +5 -4
- package/dist/api/prompt-hook.d.ts +32 -19
- package/dist/api/prompt-hook.js +65 -44
- package/dist/api/provenance-coverage.d.ts +3 -1
- package/dist/api/provenance-coverage.js +3 -1
- package/dist/api/recall/finish.d.ts +185 -0
- package/dist/api/recall/finish.js +301 -0
- package/dist/api/{recall-pipeline.d.ts → recall/pipeline.d.ts} +12 -8
- package/dist/api/{recall-pipeline.js → recall/pipeline.js} +176 -92
- package/dist/api/recall/recall.d.ts +6 -0
- package/dist/api/{recall.js → recall/recall.js} +101 -60
- package/dist/api/recall/render.d.ts +39 -0
- package/dist/api/recall/render.js +60 -0
- package/dist/api/{recall-request.d.ts → recall/request.d.ts} +7 -5
- package/dist/api/recall/request.js +261 -0
- package/dist/api/{recall-cli.d.ts → recall/rows.d.ts} +18 -12
- package/dist/api/{recall-cli.js → recall/rows.js} +28 -27
- package/dist/api/{recall-types.d.ts → recall/types.d.ts} +95 -70
- package/dist/api/{recall-types.js → recall/types.js} +1 -1
- package/dist/api/session-end.d.ts +16 -12
- package/dist/api/session-end.js +46 -30
- package/dist/api/{auto-sleep.d.ts → sleep/auto-sleep.d.ts} +9 -5
- package/dist/api/{auto-sleep.js → sleep/auto-sleep.js} +7 -12
- package/dist/api/sleep/dormant.d.ts +25 -0
- package/dist/api/sleep/dormant.js +64 -0
- package/dist/api/{learn.d.ts → sleep/learn.d.ts} +5 -4
- package/dist/api/sleep/learn.js +138 -0
- package/dist/api/sleep/sleep-run.d.ts +38 -0
- package/dist/api/{sleep-run.js → sleep/sleep-run.js} +51 -43
- package/dist/api/{sleep.d.ts → sleep/sleep.d.ts} +17 -11
- package/dist/api/sleep/sleep.js +9 -0
- package/dist/api/status.d.ts +3 -1
- package/dist/api/status.js +3 -1
- package/dist/api/store-init.d.ts +4 -1
- package/dist/api/store-init.js +4 -1
- package/dist/api/tokens.d.ts +10 -9
- package/dist/api/tokens.js +9 -10
- package/dist/api/types.d.ts +28 -7
- package/dist/api/types.js +13 -4
- package/dist/capture/caller-session.d.ts +8 -2
- package/dist/capture/caller-session.js +16 -6
- package/dist/capture/capture-error.d.ts +3 -1
- package/dist/capture/capture-error.js +3 -1
- package/dist/capture/codex-patch.js +7 -2
- package/dist/capture/command.d.ts +4 -2
- package/dist/capture/command.js +33 -14
- package/dist/capture/compact-resume-caller.js +15 -8
- package/dist/capture/compact.d.ts +8 -5
- package/dist/capture/compact.js +34 -23
- package/dist/capture/compaction-items-caller.js +9 -3
- package/dist/capture/compaction-record.d.ts +4 -3
- package/dist/capture/compaction-record.js +20 -12
- package/dist/capture/compaction-spool.d.ts +15 -4
- package/dist/capture/compaction-spool.js +64 -17
- package/dist/capture/copilot-transcript.d.ts +11 -3
- package/dist/capture/copilot-transcript.js +16 -6
- package/dist/capture/extract.js +20 -8
- package/dist/capture/failure-caller.js +23 -12
- package/dist/capture/failure-reading.d.ts +10 -3
- package/dist/capture/failure-reading.js +24 -7
- package/dist/capture/pre-compact-caller.js +11 -4
- package/dist/capture/session-digest.d.ts +15 -4
- package/dist/capture/session-digest.js +39 -13
- package/dist/capture/session-end-caller.d.ts +4 -1
- package/dist/capture/session-end-caller.js +20 -8
- package/dist/capture/session-texts.d.ts +6 -2
- package/dist/capture/session-texts.js +22 -7
- package/dist/capture/session-worker.d.ts +4 -2
- package/dist/capture/session-worker.js +45 -17
- package/dist/capture/transcript.d.ts +13 -4
- package/dist/capture/transcript.js +32 -10
- package/dist/capture/working-state.d.ts +13 -4
- package/dist/capture/working-state.js +50 -56
- package/dist/cli/api-context.d.ts +14 -2
- package/dist/cli/api-context.js +45 -2
- package/dist/cli/audit.js +23 -23
- package/dist/cli/auth.js +19 -27
- package/dist/cli/briefs.d.ts +1 -1
- package/dist/cli/briefs.js +20 -15
- package/dist/cli/card.d.ts +1 -1
- package/dist/cli/card.js +56 -73
- package/dist/cli/client.d.ts +12 -4
- package/dist/cli/client.js +43 -13
- package/dist/cli/compact-resume-payload.d.ts +4 -1
- package/dist/cli/compact-resume-payload.js +12 -5
- package/dist/cli/context.js +42 -17
- package/dist/cli/continuity.d.ts +5 -5
- package/dist/cli/continuity.js +90 -107
- package/dist/cli/curate.d.ts +4 -3
- package/dist/cli/curate.js +46 -68
- package/dist/cli/dag.d.ts +1 -1
- package/dist/cli/dag.js +14 -17
- package/dist/cli/decisions.js +27 -26
- package/dist/cli/eval.js +16 -21
- package/dist/cli/exit.d.ts +4 -1
- package/dist/cli/exit.js +10 -2
- package/dist/cli/explain.js +12 -11
- package/dist/cli/flag-values.d.ts +1 -1
- package/dist/cli/flag-values.js +9 -18
- package/dist/cli/github.d.ts +6 -0
- package/dist/cli/github.js +25 -13
- package/dist/cli/goals.d.ts +1 -1
- package/dist/cli/goals.js +39 -56
- package/dist/cli/graph.d.ts +1 -1
- package/dist/cli/graph.js +15 -11
- package/dist/cli/hook-runtime.d.ts +31 -9
- package/dist/cli/hook-runtime.js +40 -15
- package/dist/cli/incidents.d.ts +1 -1
- package/dist/cli/incidents.js +25 -25
- package/dist/cli/init.js +26 -11
- package/dist/cli/install-steps.d.ts +12 -3
- package/dist/cli/install-steps.js +42 -18
- package/dist/cli/last-sleep.d.ts +4 -1
- package/dist/cli/last-sleep.js +9 -4
- package/dist/cli/maintenance.d.ts +1 -1
- package/dist/cli/maintenance.js +11 -12
- package/dist/cli/notes.d.ts +1 -1
- package/dist/cli/notes.js +8 -5
- package/dist/cli/object-verbs.d.ts +4 -4
- package/dist/cli/object-verbs.js +10 -13
- package/dist/cli/open-browser.js +11 -2
- package/dist/cli/playbooks.d.ts +3 -3
- package/dist/cli/playbooks.js +40 -32
- package/dist/cli/predictions.js +15 -19
- package/dist/cli/print.js +4 -2
- package/dist/cli/projects.js +21 -11
- package/dist/cli/quality-repair-once.js +5 -4
- package/dist/cli/recall.js +129 -93
- package/dist/cli/refine-llm.d.ts +15 -4
- package/dist/cli/refine-llm.js +16 -7
- package/dist/cli/remember.js +46 -50
- package/dist/cli/scheduler.d.ts +4 -1
- package/dist/cli/scheduler.js +9 -5
- package/dist/cli/serve.js +22 -17
- package/dist/cli/session-hooks.d.ts +2 -2
- package/dist/cli/session-hooks.js +87 -50
- package/dist/cli/setup.js +54 -32
- package/dist/cli/shared.d.ts +3 -1
- package/dist/cli/shared.js +24 -9
- package/dist/cli/slack.js +15 -24
- package/dist/cli/sleep-render.d.ts +3 -1
- package/dist/cli/sleep-render.js +8 -5
- package/dist/cli/sleep.js +14 -6
- package/dist/cli/status.d.ts +4 -4
- package/dist/cli/status.js +32 -27
- package/dist/cli/stdin.d.ts +10 -3
- package/dist/cli/stdin.js +10 -3
- package/dist/cli/transfer.d.ts +1 -1
- package/dist/cli/transfer.js +71 -75
- package/dist/cli/verbs/memory.js +8 -6
- package/dist/cli/verbs/objects.js +10 -4
- package/dist/cli/versioned-verbs.d.ts +8 -7
- package/dist/cli/versioned-verbs.js +31 -21
- package/dist/cli.js +13 -16
- package/dist/connectors/dlq.d.ts +6 -6
- package/dist/connectors/dlq.js +12 -8
- package/dist/connectors/github/backfill.d.ts +4 -4
- package/dist/connectors/github/backfill.js +6 -4
- package/dist/connectors/github/deletion.d.ts +6 -4
- package/dist/connectors/github/deletion.js +5 -5
- package/dist/connectors/github/dlq.d.ts +8 -6
- package/dist/connectors/github/dlq.js +11 -5
- package/dist/connectors/github/ingest.d.ts +2 -2
- package/dist/connectors/github/ingest.js +9 -6
- package/dist/connectors/github/octokit-client.d.ts +3 -1
- package/dist/connectors/github/octokit-client.js +7 -2
- package/dist/connectors/github/ratelimit.d.ts +6 -2
- package/dist/connectors/github/ratelimit.js +6 -2
- package/dist/connectors/github/signature.d.ts +14 -3
- package/dist/connectors/github/signature.js +17 -3
- package/dist/connectors/github/tenant-routing.d.ts +6 -4
- package/dist/connectors/github/tenant-routing.js +6 -6
- package/dist/connectors/github/transform.js +50 -67
- package/dist/connectors/github/types.d.ts +10 -3
- package/dist/connectors/github/types.js +6 -2
- package/dist/connectors/github/webhook.d.ts +5 -5
- package/dist/connectors/github/webhook.js +34 -23
- package/dist/connectors/ingest.d.ts +5 -3
- package/dist/connectors/ingest.js +3 -4
- package/dist/connectors/slack/backfill.d.ts +5 -5
- package/dist/connectors/slack/backfill.js +3 -3
- package/dist/connectors/slack/deletion.d.ts +4 -4
- package/dist/connectors/slack/deletion.js +6 -6
- package/dist/connectors/slack/dlq.d.ts +4 -4
- package/dist/connectors/slack/dlq.js +6 -6
- package/dist/connectors/slack/ingest.d.ts +6 -4
- package/dist/connectors/slack/ingest.js +5 -5
- package/dist/connectors/slack/signature.d.ts +4 -1
- package/dist/connectors/slack/tenant-routing.d.ts +6 -4
- package/dist/connectors/slack/tenant-routing.js +6 -6
- package/dist/connectors/slack/transform.d.ts +6 -2
- package/dist/connectors/slack/transform.js +6 -2
- package/dist/connectors/slack/types.d.ts +3 -1
- package/dist/connectors/slack/web-client.js +8 -3
- package/dist/connectors/slack/webhook.d.ts +5 -5
- package/dist/connectors/slack/webhook.js +19 -11
- package/dist/connectors/slack/workspaces.d.ts +7 -3
- package/dist/connectors/slack/workspaces.js +7 -3
- package/dist/connectors/store.d.ts +8 -0
- package/dist/connectors/store.js +2 -0
- package/dist/consolidate/conflicts.js +23 -9
- package/dist/consolidate/dag-summary.js +2 -1
- package/dist/consolidate/dag.d.ts +10 -5
- package/dist/consolidate/dag.js +37 -36
- package/dist/consolidate/decay.js +19 -6
- package/dist/consolidate/dedupe.d.ts +14 -5
- package/dist/consolidate/dedupe.js +27 -16
- package/dist/consolidate/flush-units.d.ts +4 -1
- package/dist/consolidate/flush-units.js +4 -1
- package/dist/consolidate/half-life-migration.d.ts +18 -8
- package/dist/consolidate/half-life-migration.js +48 -18
- package/dist/consolidate/llm-passes.js +27 -11
- package/dist/consolidate/memory-value-weights.d.ts +6 -2
- package/dist/consolidate/memory-value-weights.js +6 -2
- package/dist/consolidate/memory-value.d.ts +30 -10
- package/dist/consolidate/memory-value.js +36 -13
- package/dist/consolidate/merge.d.ts +4 -1
- package/dist/consolidate/merge.js +42 -32
- package/dist/consolidate/overlap-index.d.ts +8 -2
- package/dist/consolidate/overlap-index.js +11 -4
- package/dist/consolidate/physics-pass.d.ts +3 -1
- package/dist/consolidate/physics-pass.js +10 -7
- package/dist/consolidate/replay.d.ts +11 -4
- package/dist/consolidate/replay.js +19 -7
- package/dist/consolidate/run.d.ts +13 -5
- package/dist/consolidate/run.js +4 -4
- package/dist/consolidate/sleep.d.ts +14 -6
- package/dist/consolidate/sleep.js +41 -38
- package/dist/consolidate/trace.d.ts +7 -2
- package/dist/consolidate/trace.js +7 -2
- package/dist/consolidate/traces.js +26 -29
- package/dist/core/ablation.d.ts +9 -3
- package/dist/core/ablation.js +14 -4
- package/dist/core/active-scope.d.ts +3 -1
- package/dist/core/active-scope.js +3 -1
- package/dist/core/agent-memory-tools.d.ts +2 -0
- package/dist/core/agent-memory-tools.js +2 -0
- package/dist/core/ambient.d.ts +4 -3
- package/dist/core/ambient.js +8 -6
- package/dist/core/api-errors.d.ts +9 -3
- package/dist/core/api-errors.js +9 -3
- package/dist/core/capture-contract.d.ts +4 -1
- package/dist/core/capture-contract.js +27 -8
- package/dist/core/compare.d.ts +24 -8
- package/dist/core/compare.js +24 -8
- package/dist/core/config.d.ts +18 -9
- package/dist/core/config.js +24 -14
- package/dist/core/cosine.d.ts +4 -1
- package/dist/core/cosine.js +4 -1
- package/dist/core/handoff.d.ts +7 -2
- package/dist/core/handoff.js +4 -1
- package/dist/core/markdown.js +21 -16
- package/dist/core/memory-audit.js +14 -3
- package/dist/core/memory-quality.d.ts +12 -3
- package/dist/core/memory-quality.js +57 -21
- package/dist/core/memory.d.ts +84 -27
- package/dist/core/memory.js +73 -29
- package/dist/core/merged-row.d.ts +8 -2
- package/dist/core/merged-row.js +10 -3
- package/dist/core/package-root.d.ts +3 -1
- package/dist/core/package-root.js +3 -1
- package/dist/core/particle-refresh.d.ts +8 -0
- package/dist/core/particle-refresh.js +22 -0
- package/dist/core/physics-config.d.ts +4 -1
- package/dist/core/physics-config.js +6 -2
- package/dist/core/physics.d.ts +37 -11
- package/dist/core/physics.js +55 -20
- package/dist/core/project-identity.d.ts +34 -17
- package/dist/core/project-identity.js +33 -17
- package/dist/core/project-remote.d.ts +8 -4
- package/dist/core/project-remote.js +31 -14
- package/dist/core/recall-scope.d.ts +33 -11
- package/dist/core/recall-scope.js +42 -15
- package/dist/core/rejection-digest.d.ts +7 -0
- package/dist/core/rejection-digest.js +13 -0
- package/dist/core/salience.d.ts +3 -1
- package/dist/core/salience.js +10 -4
- package/dist/core/search-types.d.ts +15 -2
- package/dist/core/search-types.js +11 -0
- package/dist/dashboard/dashboard-actions.js +13 -2
- package/dist/dashboard/dashboard-snapshot.d.ts +2 -2
- package/dist/dashboard/dashboard-snapshot.js +4 -4
- package/dist/dashboard/dashboard.js +6 -3
- package/dist/db/backup.js +2 -2
- package/dist/db/busy.d.ts +10 -3
- package/dist/db/busy.js +27 -5
- package/dist/db/connect.d.ts +10 -3
- package/dist/db/connect.js +8 -3
- package/dist/db/continuity.d.ts +1 -1
- package/dist/db/continuity.js +27 -11
- package/dist/db/meta.d.ts +4 -1
- package/dist/db/meta.js +4 -1
- package/dist/db/migrate.d.ts +10 -5
- package/dist/db/migrate.js +26 -13
- package/dist/db/migrations/index.d.ts +1 -1
- package/dist/db/migrations/index.js +3 -1
- package/dist/db/migrations/types.d.ts +2 -1
- package/dist/db/migrations/v12.js +2 -1
- package/dist/db/migrations/v14.js +2 -1
- package/dist/db/migrations/v15.js +4 -2
- package/dist/db/migrations/v16.js +6 -3
- package/dist/db/migrations/v17.js +2 -1
- package/dist/db/migrations/v19.js +4 -2
- package/dist/db/migrations/v20.js +2 -1
- package/dist/db/migrations/v22.js +12 -6
- package/dist/db/migrations/v23.js +6 -3
- package/dist/db/migrations/v24.js +6 -3
- package/dist/db/migrations/v25.js +4 -2
- package/dist/db/migrations/v26.js +4 -2
- package/dist/db/migrations/v27.js +6 -3
- package/dist/db/migrations/v28.js +4 -2
- package/dist/db/migrations/v29.js +4 -2
- package/dist/db/migrations/v30.js +6 -3
- package/dist/db/migrations/v31.js +4 -2
- package/dist/db/migrations/v32.js +6 -3
- package/dist/db/migrations/v33.js +4 -2
- package/dist/db/migrations/v34.js +2 -1
- package/dist/db/migrations/v35.js +2 -1
- package/dist/db/migrations/v36.js +2 -1
- package/dist/db/migrations/v37.js +10 -5
- package/dist/db/migrations/v38.js +10 -5
- package/dist/db/migrations/v39.js +14 -6
- package/dist/db/migrations/v40.js +4 -2
- package/dist/db/migrations/v41.js +4 -2
- package/dist/db/migrations/v42.js +2 -1
- package/dist/db/migrations/v44.js +4 -2
- package/dist/db/migrations/v45.js +4 -2
- package/dist/db/migrations/v49.js +2 -1
- package/dist/db/migrations/v50.js +4 -2
- package/dist/db/migrations/v51.js +4 -2
- package/dist/db/migrations/v52.js +2 -1
- package/dist/db/migrations/v53.js +8 -4
- package/dist/db/migrations/v54.js +2 -1
- package/dist/db/migrations/v55.js +4 -2
- package/dist/db/migrations/v56.d.ts +3 -0
- package/dist/db/migrations/v56.js +28 -0
- package/dist/db/open.d.ts +24 -12
- package/dist/db/open.js +25 -13
- package/dist/db/physics-state.d.ts +8 -4
- package/dist/db/physics-state.js +13 -20
- package/dist/db/raw-archive-mirror-cleanup.d.ts +4 -2
- package/dist/db/raw-archive-mirror-cleanup.js +6 -4
- package/dist/db/request-stores.d.ts +19 -5
- package/dist/db/request-stores.js +14 -5
- package/dist/db/tables.d.ts +2 -1
- package/dist/db/tables.js +12 -4
- package/dist/db/vector-store.d.ts +13 -4
- package/dist/db/vector-store.js +34 -14
- package/dist/db/wal-checkpointer.d.ts +2 -1
- package/dist/db/wal-checkpointer.js +19 -7
- package/dist/doctor.d.ts +4 -1
- package/dist/doctor.js +121 -39
- package/dist/embeddings/local.d.ts +8 -4
- package/dist/embeddings/local.js +9 -5
- package/dist/embeddings/provider.d.ts +19 -10
- package/dist/embeddings/provider.js +31 -17
- package/dist/embeddings/transformers.d.ts +16 -4
- package/dist/embeddings/transformers.js +32 -15
- package/dist/entry/json-hooks.d.ts +1 -1
- package/dist/entry/json-hooks.js +1 -1
- package/dist/entry/project-identity.js +2 -1
- package/dist/entry/session-text.d.ts +1 -1
- package/dist/entry/session-text.js +1 -1
- package/dist/entry/sqlite-handles.d.ts +10 -0
- package/dist/entry/sqlite-handles.js +9 -0
- package/dist/entry/store-kit.d.ts +19 -6
- package/dist/entry/store-kit.js +6 -4
- package/dist/eval/eval-stats.d.ts +27 -8
- package/dist/eval/eval-stats.js +17 -5
- package/dist/eval/eval-suite.d.ts +3 -1
- package/dist/eval/eval-suite.js +409 -187
- package/dist/eval/eval.d.ts +8 -2
- package/dist/eval/eval.js +8 -2
- package/dist/eval/judgment.js +16 -6
- package/dist/graph/delta.d.ts +9 -42
- package/dist/graph/delta.js +17 -11
- package/dist/graph/extract.d.ts +10 -7
- package/dist/graph/extract.js +57 -25
- package/dist/graph/recall.d.ts +12 -4
- package/dist/graph/recall.js +30 -13
- package/dist/graph/stream.d.ts +18 -6
- package/dist/graph/stream.js +32 -10
- package/dist/graph/view.d.ts +19 -6
- package/dist/graph/view.js +42 -17
- package/dist/hooks/codex-session.js +2 -2
- package/dist/hooks/codex-wrapper.d.ts +3 -1
- package/dist/hooks/codex-wrapper.js +9 -4
- package/dist/hooks/copilot.d.ts +19 -5
- package/dist/hooks/copilot.js +54 -15
- package/dist/hooks/hook-blocks.d.ts +4 -1
- package/dist/hooks/hook-blocks.js +8 -3
- package/dist/hooks/json-hooks.d.ts +9 -5
- package/dist/hooks/json-hooks.js +69 -34
- package/dist/hooks/opencode.js +15 -5
- package/dist/hooks/shared.d.ts +27 -8
- package/dist/hooks/shared.js +57 -16
- package/dist/importers/core.d.ts +12 -4
- package/dist/importers/core.js +8 -7
- package/dist/importers/markdown-parse.d.ts +15 -5
- package/dist/importers/markdown-parse.js +16 -7
- package/dist/importers/markdown.js +6 -9
- package/dist/importers/sources.js +10 -23
- package/dist/importers/vault.d.ts +2 -2
- package/dist/importers/vault.js +43 -27
- package/dist/index.d.ts +32 -6
- package/dist/index.js +25 -7
- package/dist/learn/autolearn.d.ts +17 -6
- package/dist/learn/autolearn.js +53 -24
- package/dist/learn/churn-git.d.ts +4 -1
- package/dist/learn/churn-git.js +29 -5
- package/dist/learn/extract.d.ts +4 -1
- package/dist/learn/extract.js +16 -9
- package/dist/learn/forward-claim-detector.d.ts +17 -5
- package/dist/learn/forward-claim-detector.js +34 -15
- package/dist/learn/invalidation.d.ts +12 -7
- package/dist/learn/invalidation.js +56 -27
- package/dist/learn/roots.d.ts +3 -0
- package/dist/learn/roots.js +5 -0
- package/dist/mcp/admin-tools.d.ts +5 -5
- package/dist/mcp/admin-tools.js +28 -23
- package/dist/mcp/format.d.ts +1 -1
- package/dist/mcp/format.js +4 -2
- package/dist/mcp/framing.d.ts +3 -1
- package/dist/mcp/framing.js +20 -8
- package/dist/mcp/memory-tools.d.ts +3 -3
- package/dist/mcp/memory-tools.js +18 -14
- package/dist/mcp/protocol.d.ts +32 -16
- package/dist/mcp/protocol.js +12 -9
- package/dist/mcp/recall-tools.d.ts +3 -3
- package/dist/mcp/recall-tools.js +62 -74
- package/dist/mcp/request.d.ts +7 -5
- package/dist/mcp/request.js +57 -74
- package/dist/mcp/server.d.ts +3 -1
- package/dist/mcp/server.js +8 -3
- package/dist/mcp/session-state.d.ts +1 -1
- package/dist/mcp/session-state.js +4 -3
- package/dist/mcp/shared-gate.d.ts +3 -2
- package/dist/mcp/shared-gate.js +3 -2
- package/dist/mcp/stdio.d.ts +6 -3
- package/dist/mcp/stdio.js +52 -21
- package/dist/mcp/tool-args.d.ts +4 -1
- package/dist/mcp/tool-args.js +8 -3
- package/dist/mcp/tools.js +76 -32
- package/dist/objects/customer-notes.d.ts +12 -10
- package/dist/objects/customer-notes.js +21 -15
- package/dist/objects/decisions.d.ts +18 -10
- package/dist/objects/decisions.js +23 -17
- package/dist/objects/descriptor.js +2 -1
- package/dist/objects/fields.d.ts +4 -1
- package/dist/objects/fields.js +6 -2
- package/dist/objects/incidents.d.ts +14 -16
- package/dist/objects/incidents.js +29 -30
- package/dist/objects/lifecycle.d.ts +0 -4
- package/dist/objects/lifecycle.js +21 -24
- package/dist/objects/policies.d.ts +12 -16
- package/dist/objects/policies.js +17 -21
- package/dist/objects/processes.d.ts +16 -10
- package/dist/objects/processes.js +20 -15
- package/dist/objects/project-briefs.d.ts +13 -14
- package/dist/objects/project-briefs.js +33 -39
- package/dist/objects/skills.d.ts +10 -12
- package/dist/objects/skills.js +17 -22
- package/dist/postinstall.js +15 -7
- package/dist/predictions/planning-fallacy.d.ts +19 -6
- package/dist/predictions/planning-fallacy.js +4 -2
- package/dist/rerankers/clef.d.ts +8 -2
- package/dist/rerankers/clef.js +14 -9
- package/dist/rerankers/cross-encoder.d.ts +2 -1
- package/dist/rerankers/cross-encoder.js +9 -6
- package/dist/rerankers/index.js +2 -1
- package/dist/rerankers/jev.js +2 -1
- package/dist/rerankers/llm.d.ts +6 -2
- package/dist/rerankers/llm.js +8 -3
- package/dist/rerankers/remote.d.ts +3 -1
- package/dist/rerankers/remote.js +5 -2
- package/dist/rerankers/types.d.ts +6 -2
- package/dist/search/bm25-search.d.ts +3 -1
- package/dist/search/bm25-search.js +15 -2
- package/dist/search/boosts.js +4 -3
- package/dist/search/embed-memories.d.ts +10 -5
- package/dist/search/embed-memories.js +62 -36
- package/dist/search/engine.d.ts +4 -1
- package/dist/search/engine.js +6 -2
- package/dist/search/goal-boost.d.ts +10 -3
- package/dist/search/goal-boost.js +13 -6
- package/dist/search/hybrid-score.d.ts +4 -1
- package/dist/search/hybrid-score.js +4 -1
- package/dist/search/hybrid.d.ts +23 -8
- package/dist/search/hybrid.js +12 -7
- package/dist/search/multihop.js +14 -13
- package/dist/search/path-context.d.ts +10 -3
- package/dist/search/path-context.js +10 -3
- package/dist/search/physics-search.d.ts +9 -4
- package/dist/search/physics-search.js +38 -14
- package/dist/search/rerank.d.ts +2 -1
- package/dist/search/rerank.js +2 -1
- package/dist/search/rrf.d.ts +14 -5
- package/dist/search/rrf.js +11 -4
- package/dist/search/vector.d.ts +8 -2
- package/dist/search/vector.js +9 -3
- package/dist/server/auth.d.ts +18 -14
- package/dist/server/auth.js +69 -38
- package/dist/server/boot.d.ts +3 -1
- package/dist/server/boot.js +95 -56
- package/dist/server/client-ip.d.ts +11 -4
- package/dist/server/client-ip.js +27 -10
- package/dist/server/cursor.d.ts +10 -3
- package/dist/server/cursor.js +10 -3
- package/dist/server/deadline.d.ts +5 -2
- package/dist/server/deadline.js +10 -3
- package/dist/server/key-check-bounds.js +12 -4
- package/dist/server/lifecycle.d.ts +4 -1
- package/dist/server/lifecycle.js +10 -4
- package/dist/server/mcp-http.d.ts +2 -1
- package/dist/server/mcp-http.js +37 -22
- package/dist/server/rate-limit.d.ts +17 -5
- package/dist/server/rate-limit.js +55 -26
- package/dist/server/ready.js +7 -4
- package/dist/server/request.d.ts +15 -4
- package/dist/server/request.js +42 -15
- package/dist/server/route-checks.d.ts +4 -1
- package/dist/server/route-checks.js +8 -3
- package/dist/server/route-table.d.ts +8 -6
- package/dist/server/route-table.js +547 -93
- package/dist/server/routes/admin.d.ts +7 -7
- package/dist/server/routes/admin.js +36 -15
- package/dist/server/routes/customer-notes.d.ts +5 -5
- package/dist/server/routes/customer-notes.js +5 -4
- package/dist/server/routes/decisions.d.ts +5 -5
- package/dist/server/routes/decisions.js +12 -6
- package/dist/server/routes/incidents.d.ts +5 -5
- package/dist/server/routes/incidents.js +10 -4
- package/dist/server/routes/memories.d.ts +8 -8
- package/dist/server/routes/memories.js +12 -19
- package/dist/server/routes/object-routes.d.ts +8 -5
- package/dist/server/routes/object-routes.js +4 -2
- package/dist/server/routes/policies.d.ts +6 -6
- package/dist/server/routes/policies.js +11 -4
- package/dist/server/routes/predictions.d.ts +5 -5
- package/dist/server/routes/predictions.js +9 -4
- package/dist/server/routes/processes.d.ts +5 -5
- package/dist/server/routes/processes.js +15 -6
- package/dist/server/routes/project-briefs.d.ts +6 -6
- package/dist/server/routes/project-briefs.js +3 -2
- package/dist/server/routes/recall.d.ts +3 -3
- package/dist/server/routes/recall.js +21 -10
- package/dist/server/routes/skills.d.ts +6 -6
- package/dist/server/routes/skills.js +12 -4
- package/dist/server/server-detect.d.ts +24 -8
- package/dist/server/server-detect.js +57 -22
- package/dist/server/sleep-child.js +16 -10
- package/dist/server/sleep-offload.d.ts +8 -5
- package/dist/server/sleep-offload.js +41 -19
- package/dist/server/tls.d.ts +4 -1
- package/dist/server/tls.js +13 -5
- package/dist/server/types.d.ts +38 -26
- package/dist/server/validation.d.ts +4 -1
- package/dist/server/validation.js +22 -9
- package/dist/server.d.ts +15 -10
- package/dist/server.js +32 -12
- package/dist/sharing/global-store.d.ts +5 -10
- package/dist/sharing/global-store.js +8 -43
- package/dist/sharing/global-sync.d.ts +3 -1
- package/dist/sharing/global-sync.js +16 -6
- package/dist/sharing/project-merge.d.ts +25 -7
- package/dist/sharing/project-merge.js +49 -17
- package/dist/sharing/search-both.d.ts +8 -4
- package/dist/sharing/search-both.js +19 -12
- package/dist/sharing/share.d.ts +8 -4
- package/dist/sharing/share.js +39 -15
- package/dist/store/ambient.js +9 -5
- package/dist/store/audit-event.d.ts +2 -2
- package/dist/store/audit-event.js +8 -3
- package/dist/store/audit.d.ts +6 -3
- package/dist/store/audit.js +16 -6
- package/dist/store/auth.d.ts +4 -2
- package/dist/store/auth.js +63 -20
- package/dist/store/busy.d.ts +9 -0
- package/dist/store/busy.js +16 -0
- package/dist/store/candidates.d.ts +12 -5
- package/dist/store/candidates.js +75 -36
- package/dist/store/capture-write.d.ts +2 -1
- package/dist/store/capture-write.js +2 -1
- package/dist/store/card-detail.d.ts +4 -4
- package/dist/store/card-detail.js +15 -8
- package/dist/store/cards.d.ts +24 -10
- package/dist/store/cards.js +93 -60
- package/dist/store/compaction-caller.d.ts +2 -1
- package/dist/store/compaction-caller.js +2 -1
- package/dist/store/compactions-record.d.ts +14 -8
- package/dist/store/compactions-record.js +95 -32
- package/dist/store/compactions.js +35 -15
- package/dist/store/conflicts.d.ts +9 -4
- package/dist/store/conflicts.js +100 -45
- package/dist/store/connectors/dlq.d.ts +17 -5
- package/dist/store/connectors/dlq.js +56 -5
- package/dist/store/connectors/event-log.d.ts +111 -2
- package/dist/store/connectors/event-log.js +2 -1
- package/dist/store/connectors/github.d.ts +6 -3
- package/dist/store/connectors/github.js +24 -40
- package/dist/store/connectors/slack.d.ts +2 -1
- package/dist/store/connectors/slack.js +25 -37
- package/dist/store/dashboard-reads.d.ts +7 -3
- package/dist/store/dashboard-reads.js +32 -11
- package/dist/store/delete-and-batch.d.ts +17 -11
- package/dist/store/delete-and-batch.js +67 -26
- package/dist/store/delivery-recorder.d.ts +8 -5
- package/dist/store/delivery-recorder.js +70 -32
- package/dist/store/descendant-page.d.ts +2 -1
- package/dist/store/descendant-page.js +24 -9
- package/dist/store/diagnostics.d.ts +2 -1
- package/dist/store/diagnostics.js +2 -1
- package/dist/store/doctor-reads.d.ts +2 -1
- package/dist/store/doctor-reads.js +13 -5
- package/dist/store/dormant.d.ts +19 -11
- package/dist/store/dormant.js +40 -18
- package/dist/store/embeddings/index.d.ts +13 -9
- package/dist/store/embeddings/index.js +19 -12
- package/dist/store/entry-reads.d.ts +49 -20
- package/dist/store/entry-reads.js +181 -66
- package/dist/store/entry-row.d.ts +10 -6
- package/dist/store/entry-row.js +17 -12
- package/dist/store/entry-writes.d.ts +22 -10
- package/dist/store/entry-writes.js +41 -14
- package/dist/store/failure-log-at.js +1 -1
- package/dist/store/failure-log.d.ts +4 -2
- package/dist/store/failure-log.js +13 -6
- package/dist/store/gated-write.d.ts +3 -3
- package/dist/store/gated-write.js +3 -3
- package/dist/store/goals.d.ts +5 -4
- package/dist/store/goals.js +8 -10
- package/dist/store/graph-apply.d.ts +21 -0
- package/dist/{graph/write.js → store/graph-apply.js} +31 -11
- package/dist/store/graph-queue.d.ts +9 -6
- package/dist/store/graph-queue.js +15 -10
- package/dist/store/graph-reads.d.ts +16 -11
- package/dist/store/graph-reads.js +24 -15
- package/dist/store/graph-rows.d.ts +41 -3
- package/dist/store/graph-rows.js +10 -7
- package/dist/store/graph-view-rows.js +14 -7
- package/dist/store/graph-writes.d.ts +16 -10
- package/dist/store/graph-writes.js +59 -36
- package/dist/store/handoffs.d.ts +4 -4
- package/dist/store/handoffs.js +40 -19
- package/dist/store/index-and-stats.d.ts +2 -2
- package/dist/store/index-and-stats.js +6 -5
- package/dist/store/index.d.ts +3 -1
- package/dist/store/index.js +1 -0
- package/dist/store/key-audit.d.ts +2 -1
- package/dist/store/key-audit.js +2 -1
- package/dist/store/key-writes.d.ts +2 -1
- package/dist/store/key-writes.js +9 -2
- package/dist/store/ledger-turn.d.ts +4 -1
- package/dist/store/ledger-turn.js +7 -2
- package/dist/store/mirrors.d.ts +11 -4
- package/dist/store/mirrors.js +88 -16
- package/dist/store/narrow.d.ts +6 -0
- package/dist/store/narrow.js +11 -0
- package/dist/store/open.d.ts +4 -2
- package/dist/store/open.js +18 -9
- package/dist/store/pilot-arm.d.ts +2 -1
- package/dist/store/pilot-arm.js +18 -6
- package/dist/store/planning-fallacy-evidence.d.ts +2 -2
- package/dist/store/planning-fallacy-evidence.js +8 -5
- package/dist/store/port/agent-import.d.ts +62 -0
- package/dist/store/port/agent-import.js +2 -0
- package/dist/store/port/consolidation.d.ts +129 -0
- package/dist/store/port/consolidation.js +2 -0
- package/dist/store/port/learning.d.ts +19 -0
- package/dist/store/port/learning.js +2 -0
- package/dist/store/port/local-files.d.ts +18 -0
- package/dist/store/port/local-files.js +2 -0
- package/dist/store/port/promotion.d.ts +20 -0
- package/dist/store/port/promotion.js +3 -0
- package/dist/store/port-groups.d.ts +160 -0
- package/dist/store/port-groups.js +2 -0
- package/dist/store/port.d.ts +215 -229
- package/dist/store/port.js +3 -9
- package/dist/store/predictions.d.ts +14 -10
- package/dist/store/predictions.js +37 -17
- package/dist/store/project-tags.d.ts +4 -1
- package/dist/store/project-tags.js +16 -5
- package/dist/store/quality-repair.d.ts +8 -4
- package/dist/store/quality-repair.js +53 -20
- package/dist/store/quarantine.d.ts +1 -0
- package/dist/store/quarantine.js +23 -9
- package/dist/store/raw-archive.d.ts +5 -4
- package/dist/store/raw-archive.js +11 -10
- package/dist/store/recall-trace.d.ts +22 -17
- package/dist/store/recall-trace.js +126 -63
- package/dist/store/rejected-values.d.ts +15 -10
- package/dist/store/rejected-values.js +33 -12
- package/dist/store/rejection.d.ts +12 -11
- package/dist/store/rejection.js +18 -19
- package/dist/store/report-reads.d.ts +2 -1
- package/dist/store/report-reads.js +2 -1
- package/dist/store/rows.d.ts +7 -5
- package/dist/store/rows.js +18 -11
- package/dist/store/rule-sql.d.ts +6 -4
- package/dist/store/rule-sql.js +16 -9
- package/dist/store/search-rows.d.ts +14 -9
- package/dist/store/search-rows.js +48 -23
- package/dist/store/sessions.d.ts +12 -10
- package/dist/store/sessions.js +40 -21
- package/dist/store/set-aside.d.ts +2 -2
- package/dist/store/set-aside.js +18 -5
- package/dist/store/sqlite/agent-import.d.ts +3 -0
- package/dist/store/sqlite/agent-import.js +77 -0
- package/dist/store/sqlite/cards-group.d.ts +6 -0
- package/dist/store/sqlite/cards-group.js +37 -0
- package/dist/store/sqlite/conflicts-group.d.ts +6 -0
- package/dist/store/sqlite/conflicts-group.js +18 -0
- package/dist/store/sqlite/connector-events-group.d.ts +2 -1
- package/dist/store/sqlite/connector-events-group.js +17 -6
- package/dist/store/sqlite/connector-writes-group.d.ts +2 -1
- package/dist/store/sqlite/connector-writes-group.js +9 -4
- package/dist/store/sqlite/consolidation-group.d.ts +4 -0
- package/dist/store/sqlite/consolidation-group.js +64 -0
- package/dist/store/sqlite/dag-reads-group.js +1 -1
- package/dist/store/sqlite/dormant-group.d.ts +6 -0
- package/dist/store/sqlite/dormant-group.js +29 -0
- package/dist/store/sqlite/entry-writes-group.d.ts +6 -3
- package/dist/store/sqlite/entry-writes-group.js +37 -14
- package/dist/store/sqlite/error-codec.d.ts +4 -2
- package/dist/store/sqlite/error-codec.js +32 -10
- package/dist/store/sqlite/executor-counts.js +2 -1
- package/dist/store/sqlite/executor.d.ts +8 -3
- package/dist/store/sqlite/executor.js +56 -18
- package/dist/store/sqlite/global-promote.d.ts +5 -0
- package/dist/store/sqlite/global-promote.js +48 -0
- package/dist/store/sqlite/goals-group.d.ts +6 -0
- package/dist/store/sqlite/goals-group.js +23 -0
- package/dist/store/sqlite/graph-reads-group.d.ts +2 -1
- package/dist/store/sqlite/graph-reads-group.js +2 -1
- package/dist/store/sqlite/held-connection.d.ts +7 -1
- package/dist/store/sqlite/held-connection.js +34 -7
- package/dist/store/sqlite/last-recall-group.d.ts +4 -2
- package/dist/store/sqlite/last-recall-group.js +9 -4
- package/dist/store/sqlite/learning-group.d.ts +4 -0
- package/dist/store/sqlite/learning-group.js +17 -0
- package/dist/store/sqlite/maintenance-groups.js +2 -1
- package/dist/store/sqlite/object-rows.d.ts +6 -3
- package/dist/store/sqlite/object-rows.js +34 -5
- package/dist/store/sqlite/objects-group.d.ts +5 -4
- package/dist/store/sqlite/objects-group.js +84 -33
- package/dist/store/sqlite/predictions-group.d.ts +2 -1
- package/dist/store/sqlite/predictions-group.js +4 -2
- package/dist/store/sqlite/promotion-group.d.ts +3 -0
- package/dist/store/sqlite/promotion-group.js +10 -0
- package/dist/store/sqlite/quarantine-group.d.ts +2 -1
- package/dist/store/sqlite/quarantine-group.js +4 -2
- package/dist/store/sqlite/reports-group.d.ts +6 -0
- package/dist/store/sqlite/reports-group.js +33 -0
- package/dist/store/sqlite/request-scope.d.ts +6 -0
- package/dist/store/sqlite/request-scope.js +18 -0
- package/dist/store/sqlite/sessions-group.d.ts +6 -0
- package/dist/store/sqlite/sessions-group.js +46 -0
- package/dist/store/sqlite/store.d.ts +22 -11
- package/dist/store/sqlite/store.js +84 -11
- package/dist/store/sqlite/vector-pack.js +2 -1
- package/dist/store/sqlite/vector-reads-group.js +2 -1
- package/dist/store/sqlite/worker-jobs.d.ts +2 -1
- package/dist/store/sqlite/worker-jobs.js +19 -7
- package/dist/store/sqlite/worker-ops.d.ts +10 -5
- package/dist/store/sqlite/worker-ops.js +6 -3
- package/dist/store/sqlite/worker-store.d.ts +4 -3
- package/dist/store/sqlite/worker-store.js +24 -14
- package/dist/store/summaries.d.ts +19 -12
- package/dist/store/summaries.js +36 -21
- package/dist/store/summary-dirty.d.ts +2 -1
- package/dist/store/summary-dirty.js +2 -1
- package/dist/store/tenant.d.ts +3 -2
- package/dist/store/tenant.js +5 -4
- package/dist/store/token-ledger-rows.js +6 -3
- package/dist/store/token-ledger.d.ts +19 -13
- package/dist/store/token-ledger.js +27 -14
- package/dist/store/tombstone-checks.d.ts +4 -1
- package/dist/store/tombstone-checks.js +10 -1
- package/dist/store/usage-reports.js +2 -1
- package/dist/store/vector-index.d.ts +8 -5
- package/dist/store/vector-index.js +24 -10
- package/dist/store/working-memory.d.ts +6 -4
- package/dist/store/working-memory.js +14 -9
- package/dist/support-bundle.js +10 -5
- package/dist/trust/quarantine.d.ts +1 -2
- package/dist/trust/quarantine.js +1 -5
- package/dist/trust/reject-flow.d.ts +12 -3
- package/dist/trust/reject-flow.js +12 -4
- package/dist/util/anthropic-messages.d.ts +4 -1
- package/dist/util/anthropic-messages.js +14 -5
- package/dist/util/atomic-write.d.ts +4 -2
- package/dist/util/atomic-write.js +25 -14
- package/dist/util/compaction-items.d.ts +4 -1
- package/dist/util/compaction-items.js +8 -2
- package/dist/util/crash-handlers.d.ts +7 -2
- package/dist/util/crash-handlers.js +13 -4
- package/dist/util/env.d.ts +16 -4
- package/dist/util/env.js +78 -25
- package/dist/util/home-path.js +12 -6
- package/dist/util/hook-payload.d.ts +3 -1
- package/dist/util/hook-payload.js +3 -1
- package/dist/util/http-retry.d.ts +12 -6
- package/dist/util/http-retry.js +16 -6
- package/dist/util/http-util.d.ts +20 -5
- package/dist/util/http-util.js +28 -9
- package/dist/util/json.d.ts +4 -1
- package/dist/util/json.js +4 -1
- package/dist/util/keyset.js +2 -1
- package/dist/util/limits.js +4 -2
- package/dist/util/log.d.ts +13 -5
- package/dist/util/log.js +29 -6
- package/dist/util/net.d.ts +5 -0
- package/dist/util/net.js +19 -0
- package/dist/util/real-path.d.ts +2 -1
- package/dist/util/real-path.js +4 -3
- package/dist/util/request-scope.d.ts +11 -3
- package/dist/util/request-scope.js +13 -4
- package/dist/util/same-text.d.ts +10 -3
- package/dist/util/same-text.js +10 -3
- package/dist/util/secret-detect.d.ts +24 -7
- package/dist/util/secret-detect.js +49 -14
- package/dist/util/spawn-argv.d.ts +3 -1
- package/dist/util/spawn-argv.js +13 -4
- package/dist/util/sqlite-blocked.d.ts +15 -4
- package/dist/util/sqlite-blocked.js +19 -6
- package/dist/util/stored-json.d.ts +4 -1
- package/dist/util/stored-json.js +6 -2
- package/dist/util/stream-tee.d.ts +2 -1
- package/dist/util/stream-tee.js +8 -5
- package/dist/util/transcript-tail.d.ts +4 -1
- package/dist/util/transcript-tail.js +4 -1
- package/dist/util/version.d.ts +8 -3
- package/dist/util/version.js +8 -3
- package/dist/util/write-budget.d.ts +7 -2
- package/dist/util/write-budget.js +5 -2
- package/dist/util/yaml.d.ts +4 -1
- package/dist/util/yaml.js +4 -1
- package/extensions/openclaw-plugin/openclaw.plugin.json +1 -1
- package/extensions/openclaw-plugin/package.json +1 -1
- package/openclaw.plugin.json +1 -1
- package/package.json +2 -1
- package/scripts/postinstall.cjs +3 -1
- package/dist/api/cards.d.ts +0 -42
- package/dist/api/conflicts.d.ts +0 -28
- package/dist/api/conflicts.js +0 -61
- package/dist/api/dormant.d.ts +0 -14
- package/dist/api/dormant.js +0 -58
- package/dist/api/goals.d.ts +0 -18
- package/dist/api/graph.d.ts +0 -8
- package/dist/api/graph.js +0 -8
- package/dist/api/learn.js +0 -125
- package/dist/api/memories.d.ts +0 -25
- package/dist/api/objects.d.ts +0 -9
- package/dist/api/outcome.d.ts +0 -19
- package/dist/api/predictions.d.ts +0 -11
- package/dist/api/promote.d.ts +0 -36
- package/dist/api/recall-core.d.ts +0 -4
- package/dist/api/recall-core.js +0 -125
- package/dist/api/recall-finish.d.ts +0 -53
- package/dist/api/recall-finish.js +0 -30
- package/dist/api/recall-history.d.ts +0 -64
- package/dist/api/recall-history.js +0 -159
- package/dist/api/recall-record.d.ts +0 -43
- package/dist/api/recall-record.js +0 -78
- package/dist/api/recall-request.js +0 -121
- package/dist/api/recall.d.ts +0 -6
- package/dist/api/refine.d.ts +0 -7
- package/dist/api/refine.js +0 -10
- package/dist/api/session-owners.d.ts +0 -4
- package/dist/api/session-owners.js +0 -17
- package/dist/api/sleep-run.d.ts +0 -26
- package/dist/api/sleep.js +0 -11
- package/dist/graph/write.d.ts +0 -14
- package/dist/store/sqlite/busy.d.ts +0 -3
- package/dist/store/sqlite/busy.js +0 -8
- package/dist/store/sqlite/local.d.ts +0 -4
- package/dist/store/sqlite/local.js +0 -8
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import type { DatabaseSyncLike } from '../../db/index.js';
|
|
2
|
-
import type {
|
|
2
|
+
import type { EntryWrite, RawArchive } from '../port.js';
|
|
3
|
+
import type { GitHubDlqInsert, GitHubRouting } from './github.js';
|
|
4
|
+
import type { SlackDlqInsert, SlackTeamRoute } from './slack.js';
|
|
3
5
|
/** Which log table a connector writes and the column its dedupe key lives in. */
|
|
4
6
|
export interface EventLogSpec {
|
|
5
7
|
readonly table: 'slack_event_log' | 'github_event_log';
|
|
@@ -7,7 +9,114 @@ export interface EventLogSpec {
|
|
|
7
9
|
}
|
|
8
10
|
export declare function eventSeenAt(db: DatabaseSyncLike, log: EventLogSpec, key: string): boolean;
|
|
9
11
|
export declare function eventMemoryAt(db: DatabaseSyncLike, log: EventLogSpec, key: string): string | null;
|
|
10
|
-
/** Records the key unless a row holds it already; false means another writer got there first. `extra` pairs
|
|
12
|
+
/** Records the key unless a row holds it already; false means another writer got there first. `extra` pairs
|
|
13
|
+
* connector-only columns with values. */
|
|
11
14
|
export declare function markEventSeenAt(db: DatabaseSyncLike, log: EventLogSpec, key: string, extra: ReadonlyArray<readonly [string, string]>, memoryId: string | null): boolean;
|
|
12
15
|
export declare function eventRecord(hippoRoot: string, log: EventLogSpec, key: string): ConnectorEventRecord;
|
|
16
|
+
/** The source event a connector's write answers, by the source's own key. The store logs each key once per connector,
|
|
17
|
+
* across every tenant. */
|
|
18
|
+
export type ConnectorEvent = {
|
|
19
|
+
readonly connector: 'slack';
|
|
20
|
+
readonly eventId: string;
|
|
21
|
+
} | {
|
|
22
|
+
readonly connector: 'github';
|
|
23
|
+
readonly idempotencyKey: string;
|
|
24
|
+
readonly deliveryId: string;
|
|
25
|
+
readonly eventName: string;
|
|
26
|
+
};
|
|
27
|
+
/** An entry a connector brings in. `quarantine` is the review record of flagged content, whose entry already carries
|
|
28
|
+
* its quarantine scope. */
|
|
29
|
+
export interface ConnectorWrite extends EntryWrite {
|
|
30
|
+
readonly event?: ConnectorEvent;
|
|
31
|
+
readonly quarantine?: {
|
|
32
|
+
readonly originalScope: string | null;
|
|
33
|
+
readonly reason: string;
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
/** 'duplicate': the event's key was logged before; `memoryId` is the id its log row holds, null for an event logged
|
|
37
|
+
* with no memory. */
|
|
38
|
+
export type ConnectorWriteOutcome = {
|
|
39
|
+
readonly outcome: 'written';
|
|
40
|
+
} | {
|
|
41
|
+
readonly outcome: 'duplicate';
|
|
42
|
+
readonly memoryId: string | null;
|
|
43
|
+
};
|
|
44
|
+
export interface ConnectorArchive extends RawArchive {
|
|
45
|
+
readonly event: ConnectorEvent;
|
|
46
|
+
}
|
|
47
|
+
/** A connector's writes with the rows that must commit with them: the event log row
|
|
48
|
+
* that turns a redelivery into a no-op, and the quarantine record of flagged content. */
|
|
49
|
+
export interface ConnectorWrites {
|
|
50
|
+
/** entryWrites.writeEntry plus, in its transaction: with `quarantine`, one pending record and quarantine row; with
|
|
51
|
+
* `event`, one log row. All commit or none. A key logged before resolves 'duplicate' and stores nothing (never a
|
|
52
|
+
* rejection); every other refusal is writeEntry's own, decided first. */
|
|
53
|
+
writeConnectorEntry(write: ConnectorWrite): Promise<ConnectorWriteOutcome>;
|
|
54
|
+
/** entryWrites.archiveRaw plus, in its transaction, one log row for `event` naming the archived id, so a redelivery
|
|
55
|
+
* finds it logged; a failed log write undoes the archive. A key logged before keeps its row and does not stop the
|
|
56
|
+
* archive. Reach and every rejection are archiveRaw's own. */
|
|
57
|
+
archiveConnectorEntry(archive: ConnectorArchive): Promise<string>;
|
|
58
|
+
}
|
|
59
|
+
/** What the event log holds for one event's key; `memoryId` is null for an event logged with no memory. */
|
|
60
|
+
export type ConnectorEventRecord = {
|
|
61
|
+
readonly seen: false;
|
|
62
|
+
} | {
|
|
63
|
+
readonly seen: true;
|
|
64
|
+
readonly memoryId: string | null;
|
|
65
|
+
};
|
|
66
|
+
export interface DeletionLookup {
|
|
67
|
+
readonly event: ConnectorEvent;
|
|
68
|
+
readonly artifactRef: string;
|
|
69
|
+
readonly tenantId: string;
|
|
70
|
+
}
|
|
71
|
+
/** `memoryId` is null when the tenant holds no raw row for the artifact. */
|
|
72
|
+
export type DeletionTarget = {
|
|
73
|
+
readonly seen: true;
|
|
74
|
+
} | {
|
|
75
|
+
readonly seen: false;
|
|
76
|
+
readonly memoryId: string | null;
|
|
77
|
+
};
|
|
78
|
+
export interface ArtifactArchive {
|
|
79
|
+
readonly tenantId: string;
|
|
80
|
+
readonly actor: string;
|
|
81
|
+
readonly artifactRef: string;
|
|
82
|
+
readonly reason: string;
|
|
83
|
+
readonly event: Extract<ConnectorEvent, {
|
|
84
|
+
readonly connector: 'github';
|
|
85
|
+
}>;
|
|
86
|
+
}
|
|
87
|
+
/** One payload a webhook could not use, already redacted, for the dead-letter queue of its connector. */
|
|
88
|
+
export type ConnectorDeadLetter = ({
|
|
89
|
+
readonly connector: 'slack';
|
|
90
|
+
} & SlackDlqInsert) | ({
|
|
91
|
+
readonly connector: 'github';
|
|
92
|
+
} & GitHubDlqInsert);
|
|
93
|
+
/** What a connector delivery reads and writes beside connectorWrites: the event log,
|
|
94
|
+
* tenant routing, the dead-letter queue and the archive of a deleted artifact. */
|
|
95
|
+
export interface ConnectorEvents {
|
|
96
|
+
/** The log row of the event's key, in its connector's own key space. */
|
|
97
|
+
eventRecord(event: ConnectorEvent): Promise<ConnectorEventRecord>;
|
|
98
|
+
/** Logs an event that stored no memory, so its redelivery finds it. A key logged before keeps its row, the memory id
|
|
99
|
+
* it names included. */
|
|
100
|
+
markEventSeen(event: ConnectorEvent): Promise<void>;
|
|
101
|
+
/** Both reads on one snapshot: an event logged before answers `seen`, else the raw row the
|
|
102
|
+
* tenant holds for the artifact. Another tenant's row under the same ref is never returned. */
|
|
103
|
+
deletionTarget(lookup: DeletionLookup): Promise<DeletionTarget>;
|
|
104
|
+
/** A logged event answers `duplicate` and changes nothing. Else one transaction archives every raw row of the
|
|
105
|
+
* artifact (archive_raw row each, under `actor`) and logs the event naming the first, or no memory if none; one
|
|
106
|
+
* failed archive undoes all and the log row. No reach check. */
|
|
107
|
+
archiveDeletedArtifact(archive: ArtifactArchive): Promise<{
|
|
108
|
+
readonly duplicate: boolean;
|
|
109
|
+
readonly archived: number;
|
|
110
|
+
}>;
|
|
111
|
+
/** The tenant a Slack team is registered to, or how many workspaces are registered when it is not. */
|
|
112
|
+
slackTeamRoute(teamId: string): Promise<SlackTeamRoute>;
|
|
113
|
+
/** The tenant of the installation, or of the repository when no installation is named, with the size of both routing
|
|
114
|
+
* tables. */
|
|
115
|
+
githubRouting(query: {
|
|
116
|
+
readonly installationId?: string | null;
|
|
117
|
+
readonly repoFullName?: string | null;
|
|
118
|
+
}): Promise<GitHubRouting>;
|
|
119
|
+
/** Appends the row and answers its id. */
|
|
120
|
+
parkDeadLetter(letter: ConnectorDeadLetter): Promise<number>;
|
|
121
|
+
}
|
|
13
122
|
//# sourceMappingURL=event-log.d.ts.map
|
|
@@ -9,7 +9,8 @@ export function eventMemoryAt(db, log, key) {
|
|
|
9
9
|
const row = db.prepare(`SELECT memory_id FROM ${log.table} WHERE ${log.keyColumn} = ?`).get(key);
|
|
10
10
|
return row?.memory_id ?? null;
|
|
11
11
|
}
|
|
12
|
-
/** Records the key unless a row holds it already; false means another writer got there first. `extra` pairs
|
|
12
|
+
/** Records the key unless a row holds it already; false means another writer got there first. `extra` pairs
|
|
13
|
+
* connector-only columns with values. */
|
|
13
14
|
export function markEventSeenAt(db, log, key, extra, memoryId) {
|
|
14
15
|
const names = [log.keyColumn, ...extra.map(([name]) => name), 'ingested_at', 'memory_id'];
|
|
15
16
|
const values = [key, ...extra.map(([, value]) => value), new Date().toISOString(), memoryId];
|
|
@@ -22,7 +22,8 @@ export interface ArtifactDeletion {
|
|
|
22
22
|
reason: string;
|
|
23
23
|
who: string;
|
|
24
24
|
}
|
|
25
|
-
/** Archives every active raw row of one tenant's artifact and logs the delete event; a failed archive rolls back the
|
|
25
|
+
/** Archives every active raw row of one tenant's artifact and logs the delete event; a failed archive rolls back the
|
|
26
|
+
* batch and the log row. */
|
|
26
27
|
export declare function archiveDeletedArtifact(hippoRoot: string, del: ArtifactDeletion): {
|
|
27
28
|
duplicate: boolean;
|
|
28
29
|
archived: number;
|
|
@@ -43,7 +44,8 @@ export interface DlqItem {
|
|
|
43
44
|
retriedAt: string | null;
|
|
44
45
|
bucket: DlqBucket | string;
|
|
45
46
|
}
|
|
46
|
-
/** One github_dlq row to write, already redacted by the caller; the four GitHub-only columns are stored NULL when left
|
|
47
|
+
/** One github_dlq row to write, already redacted by the caller; the four GitHub-only columns are stored NULL when left
|
|
48
|
+
* out. */
|
|
47
49
|
export interface GitHubDlqInsert {
|
|
48
50
|
tenantId: string;
|
|
49
51
|
rawPayload: string;
|
|
@@ -59,7 +61,8 @@ export declare function insertGitHubDlq(hippoRoot: string, row: GitHubDlqInsert)
|
|
|
59
61
|
export declare function listGitHubDlq(hippoRoot: string, tenantId: string, limit: number): DlqItem[];
|
|
60
62
|
export declare function githubDlqEntry(hippoRoot: string, id: number): DlqItem | null;
|
|
61
63
|
export declare function markGitHubDlqRetried(hippoRoot: string, id: number): void;
|
|
62
|
-
/** What the routing tables say about one webhook; `tenant` is the installation match, or the repo match when no
|
|
64
|
+
/** What the routing tables say about one webhook; `tenant` is the installation match, or the repo match when no
|
|
65
|
+
* installation was sent. */
|
|
63
66
|
export interface GitHubRouting {
|
|
64
67
|
installations: number;
|
|
65
68
|
repositories: number;
|
|
@@ -3,7 +3,7 @@ import { withWriteScope } from '../../db/index.js';
|
|
|
3
3
|
import { archiveRawMemory } from '../raw-archive.js';
|
|
4
4
|
import { onHandle } from '../open.js';
|
|
5
5
|
import { eventMemoryAt, eventRecord, eventSeenAt, markEventSeenAt } from './event-log.js';
|
|
6
|
-
import {
|
|
6
|
+
import { dlqAccess } from './dlq.js';
|
|
7
7
|
const GITHUB_LOG = { table: 'github_event_log', keyColumn: 'idempotency_key' };
|
|
8
8
|
export function githubEventSeenAt(db, idempotencyKey) {
|
|
9
9
|
return eventSeenAt(db, GITHUB_LOG, idempotencyKey);
|
|
@@ -21,7 +21,8 @@ export function githubEventRecord(hippoRoot, idempotencyKey) {
|
|
|
21
21
|
export function markGitHubEventSeen(hippoRoot, entry) {
|
|
22
22
|
onHandle(hippoRoot, (db) => { markGitHubEventSeenAt(db, entry); });
|
|
23
23
|
}
|
|
24
|
-
/** Archives every active raw row of one tenant's artifact and logs the delete event; a failed archive rolls back the
|
|
24
|
+
/** Archives every active raw row of one tenant's artifact and logs the delete event; a failed archive rolls back the
|
|
25
|
+
* batch and the log row. */
|
|
25
26
|
export function archiveDeletedArtifact(hippoRoot, del) {
|
|
26
27
|
return onHandle(hippoRoot, (db) => {
|
|
27
28
|
if (githubEventSeenAt(db, del.idempotencyKey))
|
|
@@ -45,50 +46,32 @@ export function archiveDeletedArtifact(hippoRoot, del) {
|
|
|
45
46
|
return { duplicate: false, archived: memoryIds.length };
|
|
46
47
|
});
|
|
47
48
|
}
|
|
48
|
-
const
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
receivedAt: String(r.received_at),
|
|
64
|
-
retriedAt: r.retried_at == null ? null : String(r.retried_at),
|
|
65
|
-
bucket: r.bucket == null ? 'parse_error' : String(r.bucket),
|
|
66
|
-
};
|
|
67
|
-
}
|
|
49
|
+
const DLQ = dlqAccess('github_dlq', [
|
|
50
|
+
{ field: 'id', column: 'id', kind: 'int' },
|
|
51
|
+
{ field: 'tenantId', column: 'tenant_id', kind: 'text', insert: true },
|
|
52
|
+
{ field: 'rawPayload', column: 'raw_payload', kind: 'text', insert: true },
|
|
53
|
+
{ field: 'error', column: 'error', kind: 'text', insert: true },
|
|
54
|
+
{ field: 'eventName', column: 'event_name', kind: 'nullableText', insert: true },
|
|
55
|
+
{ field: 'deliveryId', column: 'delivery_id', kind: 'nullableText', insert: true },
|
|
56
|
+
{ field: 'signature', column: 'signature', kind: 'nullableText', insert: true },
|
|
57
|
+
{ field: 'installationId', column: 'installation_id', kind: 'nullableText', insert: true },
|
|
58
|
+
{ field: 'repoFullName', column: 'repo_full_name', kind: 'nullableText', insert: true },
|
|
59
|
+
{ field: 'retryCount', column: 'retry_count', kind: 'count' },
|
|
60
|
+
{ field: 'receivedAt', column: 'received_at', kind: 'text' },
|
|
61
|
+
{ field: 'retriedAt', column: 'retried_at', kind: 'nullableText' },
|
|
62
|
+
{ field: 'bucket', column: 'bucket', kind: 'bucket', insert: true },
|
|
63
|
+
]);
|
|
68
64
|
export function insertGitHubDlq(hippoRoot, row) {
|
|
69
|
-
return onHandle(hippoRoot, (db) =>
|
|
70
|
-
['tenant_id', row.tenantId],
|
|
71
|
-
['raw_payload', row.rawPayload],
|
|
72
|
-
['error', row.error],
|
|
73
|
-
['event_name', row.eventName ?? null],
|
|
74
|
-
['delivery_id', row.deliveryId ?? null],
|
|
75
|
-
['signature', row.signature],
|
|
76
|
-
['installation_id', row.installationId ?? null],
|
|
77
|
-
['repo_full_name', row.repoFullName ?? null],
|
|
78
|
-
['bucket', row.bucket],
|
|
79
|
-
]));
|
|
65
|
+
return onHandle(hippoRoot, (db) => DLQ.insert(db, row));
|
|
80
66
|
}
|
|
81
67
|
export function listGitHubDlq(hippoRoot, tenantId, limit) {
|
|
82
|
-
return onHandle(hippoRoot, (db) =>
|
|
68
|
+
return onHandle(hippoRoot, (db) => DLQ.list(db, tenantId, limit));
|
|
83
69
|
}
|
|
84
70
|
export function githubDlqEntry(hippoRoot, id) {
|
|
85
|
-
return onHandle(hippoRoot, (db) =>
|
|
86
|
-
const row = getDlqRow(db, 'github_dlq', SELECT_COLUMNS, id);
|
|
87
|
-
return row ? rowToItem(row) : null;
|
|
88
|
-
});
|
|
71
|
+
return onHandle(hippoRoot, (db) => DLQ.get(db, id));
|
|
89
72
|
}
|
|
90
73
|
export function markGitHubDlqRetried(hippoRoot, id) {
|
|
91
|
-
onHandle(hippoRoot, (db) =>
|
|
74
|
+
onHandle(hippoRoot, (db) => DLQ.markRetried(db, id));
|
|
92
75
|
}
|
|
93
76
|
export function githubRouting(hippoRoot, args) {
|
|
94
77
|
return onHandle(hippoRoot, (db) => {
|
|
@@ -143,7 +126,8 @@ export function writeHwm(hippoRoot, tenantId, repo, column, value) {
|
|
|
143
126
|
/** Sets all three HWMs to `since` for a first run; COALESCE keeps any HWM a stream has already saved. */
|
|
144
127
|
export function seedCursors(hippoRoot, tenantId, repo, since) {
|
|
145
128
|
onHandle(hippoRoot, (db) => {
|
|
146
|
-
db.prepare(`INSERT INTO github_cursors (tenant_id, repo_full_name, issues_hwm, issue_comments_hwm,
|
|
129
|
+
db.prepare(`INSERT INTO github_cursors (tenant_id, repo_full_name, issues_hwm, issue_comments_hwm, ` +
|
|
130
|
+
`pr_review_comments_hwm, updated_at)
|
|
147
131
|
VALUES (?, ?, ?, ?, ?, ?)
|
|
148
132
|
ON CONFLICT(tenant_id, repo_full_name) DO UPDATE SET
|
|
149
133
|
issues_hwm = COALESCE(github_cursors.issues_hwm, excluded.issues_hwm),
|
|
@@ -10,7 +10,8 @@ export declare function markSlackEventSeenAt(db: DatabaseSyncLike, eventId: stri
|
|
|
10
10
|
export declare function slackEventMemoryAt(db: DatabaseSyncLike, eventId: string): string | null;
|
|
11
11
|
export declare function slackEventRecord(hippoRoot: string, eventId: string): ConnectorEventRecord;
|
|
12
12
|
export declare function markSlackEventSeen(hippoRoot: string, eventId: string, memoryId: string | null): void;
|
|
13
|
-
/** The raw memory a Slack message became. The tenant filter keeps one tenant's deletion from reaching another's row
|
|
13
|
+
/** The raw memory a Slack message became. The tenant filter keeps one tenant's deletion from reaching another's row
|
|
14
|
+
* with the same ref. */
|
|
14
15
|
export declare function rawMemoryIdForArtifactAt(db: DatabaseSyncLike, artifactRef: string, tenantId: string): string | null;
|
|
15
16
|
export type DlqBucket = 'parse_error' | 'unroutable' | 'signature_fail';
|
|
16
17
|
export interface DlqItem {
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
// Every statement the Slack connector runs on hippo.db: backfill cursors, the event log, the dead-letter queue and
|
|
2
|
-
// `xAt(db, ...)` runs on the caller's handle; the same name without `At` opens hippo.db for that one
|
|
1
|
+
// Every statement the Slack connector runs on hippo.db: backfill cursors, the event log, the dead-letter queue and
|
|
2
|
+
// workspace routing. `xAt(db, ...)` runs on the caller's handle; the same name without `At` opens hippo.db for that one
|
|
3
|
+
// call.
|
|
3
4
|
import { onHandle } from '../open.js';
|
|
4
5
|
import { eventMemoryAt, eventRecord, eventSeenAt, markEventSeenAt } from './event-log.js';
|
|
5
|
-
import {
|
|
6
|
+
import { dlqAccess } from './dlq.js';
|
|
6
7
|
// Backfill cursors
|
|
7
8
|
export function slackCursorAt(db, tenantId, channelId) {
|
|
8
9
|
// SAFETY: the SELECT names the single `latest_ts` column; sqlite returns undefined when no row matches.
|
|
@@ -13,7 +14,8 @@ export function slackCursorAt(db, tenantId, channelId) {
|
|
|
13
14
|
}
|
|
14
15
|
export function saveSlackCursorAt(db, tenantId, channelId, latestTs) {
|
|
15
16
|
db.prepare(`INSERT INTO slack_cursors (tenant_id, channel_id, latest_ts, updated_at) VALUES (?,?,?,?)
|
|
16
|
-
ON CONFLICT(tenant_id, channel_id) DO UPDATE SET latest_ts = excluded.latest_ts, updated_at =
|
|
17
|
+
ON CONFLICT(tenant_id, channel_id) DO UPDATE SET latest_ts = excluded.latest_ts, updated_at =
|
|
18
|
+
excluded.updated_at`).run(tenantId, channelId, latestTs, new Date().toISOString());
|
|
17
19
|
}
|
|
18
20
|
export function slackCursor(hippoRoot, tenantId, channelId) {
|
|
19
21
|
return onHandle(hippoRoot, (db) => slackCursorAt(db, tenantId, channelId));
|
|
@@ -40,7 +42,8 @@ export function markSlackEventSeen(hippoRoot, eventId, memoryId) {
|
|
|
40
42
|
onHandle(hippoRoot, (db) => markSlackEventSeenAt(db, eventId, memoryId));
|
|
41
43
|
}
|
|
42
44
|
// Deletion lookup
|
|
43
|
-
/** The raw memory a Slack message became. The tenant filter keeps one tenant's deletion from reaching another's row
|
|
45
|
+
/** The raw memory a Slack message became. The tenant filter keeps one tenant's deletion from reaching another's row
|
|
46
|
+
* with the same ref. */
|
|
44
47
|
export function rawMemoryIdForArtifactAt(db, artifactRef, tenantId) {
|
|
45
48
|
// SAFETY: the SELECT projects only `id`; .get() returns undefined when no row matches.
|
|
46
49
|
const row = db
|
|
@@ -48,45 +51,30 @@ export function rawMemoryIdForArtifactAt(db, artifactRef, tenantId) {
|
|
|
48
51
|
.get(artifactRef, tenantId);
|
|
49
52
|
return row?.id ?? null;
|
|
50
53
|
}
|
|
51
|
-
const
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
signature: r.signature == null ? null : String(r.signature),
|
|
65
|
-
slackTimestamp: r.slack_timestamp == null ? null : String(r.slack_timestamp),
|
|
66
|
-
};
|
|
67
|
-
}
|
|
54
|
+
const DLQ = dlqAccess('slack_dlq', [
|
|
55
|
+
{ field: 'id', column: 'id', kind: 'int' },
|
|
56
|
+
{ field: 'tenantId', column: 'tenant_id', kind: 'text', insert: true },
|
|
57
|
+
{ field: 'teamId', column: 'team_id', kind: 'nullableText', insert: true },
|
|
58
|
+
{ field: 'rawPayload', column: 'raw_payload', kind: 'text', insert: true },
|
|
59
|
+
{ field: 'error', column: 'error', kind: 'text', insert: true },
|
|
60
|
+
{ field: 'receivedAt', column: 'received_at', kind: 'text' },
|
|
61
|
+
{ field: 'retriedAt', column: 'retried_at', kind: 'nullableText' },
|
|
62
|
+
{ field: 'bucket', column: 'bucket', kind: 'bucket', insert: true },
|
|
63
|
+
{ field: 'retryCount', column: 'retry_count', kind: 'count' },
|
|
64
|
+
{ field: 'signature', column: 'signature', kind: 'nullableText', insert: true },
|
|
65
|
+
{ field: 'slackTimestamp', column: 'slack_timestamp', kind: 'nullableText', insert: true },
|
|
66
|
+
]);
|
|
68
67
|
export function insertSlackDlq(hippoRoot, row) {
|
|
69
|
-
return onHandle(hippoRoot, (db) =>
|
|
70
|
-
['tenant_id', row.tenantId],
|
|
71
|
-
['team_id', row.teamId ?? null],
|
|
72
|
-
['raw_payload', row.rawPayload],
|
|
73
|
-
['error', row.error],
|
|
74
|
-
['bucket', row.bucket],
|
|
75
|
-
['signature', row.signature],
|
|
76
|
-
['slack_timestamp', row.slackTimestamp ?? null],
|
|
77
|
-
]));
|
|
68
|
+
return onHandle(hippoRoot, (db) => DLQ.insert(db, row));
|
|
78
69
|
}
|
|
79
70
|
export function listSlackDlq(hippoRoot, tenantId, limit) {
|
|
80
|
-
return onHandle(hippoRoot, (db) =>
|
|
71
|
+
return onHandle(hippoRoot, (db) => DLQ.list(db, tenantId, limit));
|
|
81
72
|
}
|
|
82
73
|
export function slackDlqEntry(hippoRoot, id) {
|
|
83
|
-
return onHandle(hippoRoot, (db) =>
|
|
84
|
-
const row = getDlqRow(db, 'slack_dlq', SELECT_COLUMNS, id);
|
|
85
|
-
return row ? rowToItem(row) : null;
|
|
86
|
-
});
|
|
74
|
+
return onHandle(hippoRoot, (db) => DLQ.get(db, id));
|
|
87
75
|
}
|
|
88
76
|
export function markSlackDlqRetried(hippoRoot, id) {
|
|
89
|
-
onHandle(hippoRoot, (db) =>
|
|
77
|
+
onHandle(hippoRoot, (db) => DLQ.markRetried(db, id));
|
|
90
78
|
}
|
|
91
79
|
export function slackTeamRouteAt(db, teamId) {
|
|
92
80
|
// SAFETY: the SELECT names only `tenant_id`; .get() returns undefined when no row matches.
|
|
@@ -13,15 +13,19 @@ export interface DashboardRows {
|
|
|
13
13
|
}
|
|
14
14
|
/** One tenant's live rows and the counts of the rest, read in one transaction so the two agree. */
|
|
15
15
|
export declare function loadDashboardRows(hippoRoot: string, tenantId: string): DashboardRows;
|
|
16
|
-
/** The dashboard's one read-only connection, kept across refreshes for the commit signal; it opens on the first read
|
|
16
|
+
/** The dashboard's one read-only connection, kept across refreshes for the commit signal; it opens on the first read
|
|
17
|
+
* that finds a database. */
|
|
17
18
|
export declare class DashboardConnection {
|
|
18
19
|
private readonly hippoRoot;
|
|
19
20
|
private db;
|
|
20
21
|
constructor(hippoRoot: string);
|
|
21
22
|
/** `PRAGMA data_version`, which moves when another connection commits; null while the store has no hippo.db. */
|
|
22
23
|
dataVersion(): number | null;
|
|
23
|
-
/** Ids with a stored vector: none before the connection opens, null on a store older than the
|
|
24
|
-
|
|
24
|
+
/** Ids of the tenant's rows with a stored vector: none before the connection opens, null on a store older than the
|
|
25
|
+
* vector table (schema v52). */
|
|
26
|
+
embeddedIds(tenantId: string): ReadonlySet<string> | null;
|
|
27
|
+
/** Whether `id` has a stored vector, whatever its tenant and whether or not a memory row holds it. */
|
|
28
|
+
hasVector(id: string): boolean;
|
|
25
29
|
close(): void;
|
|
26
30
|
}
|
|
27
31
|
//# sourceMappingURL=dashboard-reads.d.ts.map
|
|
@@ -1,18 +1,22 @@
|
|
|
1
|
-
// The dashboard snapshot's read of one tenant: live rows with only
|
|
1
|
+
// The dashboard snapshot's read of one tenant: live rows with only
|
|
2
|
+
// the columns it shows, and SQL counts of the rows it leaves out.
|
|
2
3
|
import * as fs from 'fs';
|
|
3
4
|
import { closeHippoDb, getHippoDbPath, openHippoDbReadOnly } from '../db/index.js';
|
|
4
5
|
import { withReadSnapshot } from '../db/busy.js';
|
|
5
6
|
import { pragmaDataVersion } from '../db/meta.js';
|
|
6
7
|
import { tableExists } from '../db/tables.js';
|
|
7
|
-
import { storedVectorIds } from '../db/vector-store.js';
|
|
8
8
|
import { onHandle, openStore } from './open.js';
|
|
9
9
|
import { QUARANTINE_SCOPE_PREFIX } from './quarantine.js';
|
|
10
10
|
import { parseJsonArray } from './rows.js';
|
|
11
|
-
// Full content stays: dashboard-snapshot's Fact.lower serves search over the whole text, so a preview would change
|
|
12
|
-
|
|
11
|
+
// Full content stays: dashboard-snapshot's Fact.lower serves search over the whole text, so a preview would change
|
|
12
|
+
// which rows match.
|
|
13
|
+
const LIVE_COLUMNS = 'id, created, last_retrieved, retrieval_count, half_life_days, ' +
|
|
14
|
+
'layer, tags_json, emotional_valence, outcome_positive, ' +
|
|
13
15
|
'outcome_negative, pinned, confidence, content, superseded_by, kind, scope, origin_project';
|
|
14
|
-
// SQL twins of isQuarantineScope and of the two halves of isLiveMemory; substr compares bytes, as startsWith does,
|
|
15
|
-
|
|
16
|
+
// SQL twins of isQuarantineScope and of the two halves of isLiveMemory; substr compares bytes, as startsWith does,
|
|
17
|
+
// where LIKE would fold case.
|
|
18
|
+
const QUARANTINED = `(scope IS NOT NULL ` +
|
|
19
|
+
`AND substr(scope, 1, ${QUARANTINE_SCOPE_PREFIX.length}) = '${QUARANTINE_SCOPE_PREFIX}')`;
|
|
16
20
|
const SUPERSEDED_BY = `(superseded_by IS NOT NULL AND superseded_by <> '')`;
|
|
17
21
|
const KIND = `COALESCE(kind, 'distilled')`;
|
|
18
22
|
const LIVE = `NOT ${SUPERSEDED_BY} AND ${KIND} IN ('raw', 'distilled') AND NOT ${QUARANTINED}`;
|
|
@@ -44,7 +48,9 @@ export function loadDashboardRows(hippoRoot, tenantId) {
|
|
|
44
48
|
return onHandle(hippoRoot, (db) => {
|
|
45
49
|
return withReadSnapshot(db, () => {
|
|
46
50
|
// SAFETY: the SELECT names exactly LiveRow's columns.
|
|
47
|
-
const live = db
|
|
51
|
+
const live = db
|
|
52
|
+
.prepare(`SELECT ${LIVE_COLUMNS} FROM memories WHERE tenant_id = ? AND ${LIVE} ORDER BY created ASC, id ASC`)
|
|
53
|
+
.all(tenantId);
|
|
48
54
|
// SAFETY: the SELECT names exactly these two fields, and `why` is one of the three CASE arms or NULL.
|
|
49
55
|
const counts = db.prepare(`\n SELECT CASE WHEN ${QUARANTINED} THEN 'quarantined' ` +
|
|
50
56
|
`WHEN ${SUPERSEDED_BY} OR ${KIND} = 'superseded' THEN 'superseded' ` +
|
|
@@ -59,7 +65,8 @@ export function loadDashboardRows(hippoRoot, tenantId) {
|
|
|
59
65
|
});
|
|
60
66
|
}, openStore);
|
|
61
67
|
}
|
|
62
|
-
/** The dashboard's one read-only connection, kept across refreshes for the commit signal; it opens on the first read
|
|
68
|
+
/** The dashboard's one read-only connection, kept across refreshes for the commit signal; it opens on the first read
|
|
69
|
+
* that finds a database. */
|
|
63
70
|
export class DashboardConnection {
|
|
64
71
|
hippoRoot;
|
|
65
72
|
db = null;
|
|
@@ -75,11 +82,25 @@ export class DashboardConnection {
|
|
|
75
82
|
}
|
|
76
83
|
return pragmaDataVersion(this.db);
|
|
77
84
|
}
|
|
78
|
-
/** Ids with a stored vector: none before the connection opens, null on a store older than the
|
|
79
|
-
|
|
85
|
+
/** Ids of the tenant's rows with a stored vector: none before the connection opens, null on a store older than the
|
|
86
|
+
* vector table (schema v52). */
|
|
87
|
+
embeddedIds(tenantId) {
|
|
80
88
|
if (this.db === null)
|
|
81
89
|
return new Set();
|
|
82
|
-
|
|
90
|
+
if (!tableExists(this.db, 'memory_vectors'))
|
|
91
|
+
return null;
|
|
92
|
+
// SAFETY: the SELECT names the one TEXT id column.
|
|
93
|
+
const rows = this.db
|
|
94
|
+
.prepare('SELECT m.id FROM memories m WHERE m.tenant_id = ? ' +
|
|
95
|
+
'AND EXISTS (SELECT 1 FROM memory_vectors v WHERE v.memory_id = m.id)')
|
|
96
|
+
.all(tenantId);
|
|
97
|
+
return new Set(rows.map((row) => row.id));
|
|
98
|
+
}
|
|
99
|
+
/** Whether `id` has a stored vector, whatever its tenant and whether or not a memory row holds it. */
|
|
100
|
+
hasVector(id) {
|
|
101
|
+
if (this.db === null || !tableExists(this.db, 'memory_vectors'))
|
|
102
|
+
return false;
|
|
103
|
+
return this.db.prepare('SELECT 1 FROM memory_vectors WHERE memory_id = ?').get(id) !== undefined;
|
|
83
104
|
}
|
|
84
105
|
close() {
|
|
85
106
|
if (this.db !== null)
|
|
@@ -2,14 +2,17 @@ import { type MemoryEntry } from '../core/memory.js';
|
|
|
2
2
|
import { openHippoDb, type DatabaseSyncLike } from '../db/index.js';
|
|
3
3
|
import { type DormantMove } from './dormant.js';
|
|
4
4
|
import { type WriteBudget } from '../util/write-budget.js';
|
|
5
|
-
/** Tables whose rows keep a first-class object's backing memory in `memory_id` (ON DELETE SET NULL);
|
|
5
|
+
/** Tables whose rows keep a first-class object's backing memory in `memory_id` (ON DELETE SET NULL);
|
|
6
|
+
* tests/dormant-memories.test.ts pins it to the schema. */
|
|
6
7
|
export declare const MEMORY_BACKED_TABLES: readonly ["predictions", "decisions", "incidents", "processes", "policies", "skills", "project_briefs", "customer_notes"];
|
|
7
|
-
/** Ids of memories that back a first-class object, for passes that plan deletes before making them. A table missing
|
|
8
|
+
/** Ids of memories that back a first-class object, for passes that plan deletes before making them. A table missing
|
|
9
|
+
* from an older schema is skipped. */
|
|
8
10
|
export declare function memoriesBackingObjects(hippoRoot: string): Set<string>;
|
|
9
11
|
/** memoriesBackingObjects on the caller's handle. */
|
|
10
12
|
export declare function memoriesBackingObjectsOn(db: DatabaseSyncLike): Set<string>;
|
|
11
|
-
/** db-scoped delete core, composable inside a caller's transaction; NO filesystem I/O, mirrors are written post-commit.
|
|
12
|
-
* rejectValue and resolveConflict (own audit row). Returns `{tenantId, dagParentId}`,
|
|
13
|
+
/** db-scoped delete core, composable inside a caller's transaction; NO filesystem I/O, mirrors are written post-commit.
|
|
14
|
+
* `suppressForgetAudit` is set by rejectValue and resolveConflict (own audit row). Returns `{tenantId, dagParentId}`,
|
|
15
|
+
* or null if absent or `automatic` refused it. */
|
|
13
16
|
export declare function deleteEntryCore(db: ReturnType<typeof openHippoDb>, id: string, opts?: {
|
|
14
17
|
actor?: string;
|
|
15
18
|
suppressForgetAudit?: boolean;
|
|
@@ -20,22 +23,25 @@ export declare function deleteEntryCore(db: ReturnType<typeof openHippoDb>, id:
|
|
|
20
23
|
dagParentId: string | null;
|
|
21
24
|
} | null;
|
|
22
25
|
/** Delete an entry from SQLite and mirrors; thin wrapper over `deleteEntryCore` (open, core, mirrors, close).
|
|
23
|
-
* `opts.actor` defaults to 'cli'; the api layer threads `ctx.actor` so HTTP callers land as `api_key:<key_id>` in the
|
|
26
|
+
* `opts.actor` defaults to 'cli'; the api layer threads `ctx.actor` so HTTP callers land as `api_key:<key_id>` in the
|
|
27
|
+
* audit log. */
|
|
24
28
|
export declare function deleteEntry(hippoRoot: string, id: string, opts?: {
|
|
25
29
|
actor?: string;
|
|
26
30
|
reason?: string;
|
|
27
31
|
automatic?: boolean;
|
|
28
32
|
}): boolean;
|
|
29
|
-
/** deleteEntry with `automatic` for each removal and its own forget row and reason, all in one transaction after one
|
|
30
|
-
*
|
|
33
|
+
/** deleteEntry with `automatic` for each removal and its own forget row and reason, all in one transaction after one
|
|
34
|
+
* read of the id set. Returns the ids deleted, in `removals` order; a missing, repeated, pinned, raw or object-backing
|
|
35
|
+
* id is left out. */
|
|
31
36
|
export declare function deleteEntriesAutomatically(hippoRoot: string, removals: readonly {
|
|
32
37
|
id: string;
|
|
33
38
|
reason: string;
|
|
34
39
|
}[], actor: string): string[];
|
|
35
40
|
/** Each row as the caller loaded it, by id; a `ReadonlyMap` fits. */
|
|
36
41
|
export type LoadedRows = Pick<ReadonlyMap<string, MemoryEntry>, 'get'>;
|
|
37
|
-
/** Writes, deletes and dormant moves in one transaction. With `snapshot`, a write keeps only the fields the caller
|
|
38
|
-
* Dormant moves (src/store/dormant.ts) leave `memories` like a delete; both
|
|
42
|
+
/** Writes, deletes and dormant moves in one transaction. With `snapshot`, a write keeps only the fields the caller
|
|
43
|
+
* changed and never resurrects a gone row. Dormant moves (src/store/dormant.ts) leave `memories` like a delete; both
|
|
44
|
+
* skip rows no longer auto-deletable. Returns ids that left `memories`. */
|
|
39
45
|
export declare function batchWriteAndDelete(hippoRoot: string, toWrite: MemoryEntry[], toDeleteIds: string[], opts?: {
|
|
40
46
|
snapshot?: ReadonlyMap<string, MemoryEntry>;
|
|
41
47
|
dormant?: DormantMove[];
|
|
@@ -56,8 +62,8 @@ export declare function deleteEntriesOneByOne(hippoRoot: string, targets: readon
|
|
|
56
62
|
actor?: string;
|
|
57
63
|
automatic?: boolean;
|
|
58
64
|
}): boolean[];
|
|
59
|
-
/** Commits whole components in transactions of about `budget.holdMs`, letting other writers in between; returns the ids
|
|
60
|
-
* The snapshot keeps what other writers changed after the caller loaded its rows. */
|
|
65
|
+
/** Commits whole components in transactions of about `budget.holdMs`, letting other writers in between; returns the ids
|
|
66
|
+
* that left `memories`. The snapshot keeps what other writers changed after the caller loaded its rows. */
|
|
61
67
|
export declare function commitInChunks(hippoRoot: string, components: readonly FlushComponent[], opts: {
|
|
62
68
|
snapshot: LoadedRows;
|
|
63
69
|
budget: WriteBudget;
|