hippo-memory 1.72.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/README.md +6 -4
- 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 -5
- package/dist/api/{audit.d.ts → auth/audit.d.ts} +18 -16
- package/dist/api/auth/audit.js +58 -0
- package/dist/api/{auth.d.ts → auth/auth.d.ts} +19 -16
- package/dist/api/{auth.js → auth/auth.js} +66 -54
- package/dist/api/{quarantine.d.ts → auth/quarantine.d.ts} +8 -7
- package/dist/api/{quarantine.js → auth/quarantine.js} +8 -7
- 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 +14 -4
- package/dist/api/context-render.js +14 -7
- package/dist/api/context-select.d.ts +4 -1
- package/dist/api/context-select.js +31 -34
- package/dist/api/context-types.d.ts +38 -12
- package/dist/api/context.d.ts +8 -5
- package/dist/api/context.js +120 -63
- 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} +23 -17
- package/dist/api/memories/memories.d.ts +27 -0
- package/dist/api/memories/memories.js +52 -0
- package/dist/api/memories/outcome.d.ts +22 -0
- package/dist/api/memories/outcome.js +28 -0
- package/dist/api/memories/promote.d.ts +40 -0
- package/dist/api/memories/promote.js +76 -0
- 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} +17 -9
- package/dist/api/{remember-local.js → memories/remember-local.js} +46 -24
- package/dist/api/{remember.d.ts → memories/remember.d.ts} +22 -13
- package/dist/api/{remember.js → memories/remember.js} +50 -32
- 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 -7
- 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 -3
- package/dist/api/objects/predictions.d.ts +11 -0
- package/dist/api/{predictions.js → objects/predictions.js} +7 -5
- 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 +35 -20
- package/dist/api/prompt-hook.js +66 -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} +185 -101
- package/dist/api/recall/recall.d.ts +6 -0
- package/dist/api/{recall.js → recall/recall.js} +116 -72
- 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 -68
- package/dist/api/{recall-types.js → recall/types.js} +1 -1
- package/dist/api/session-end.d.ts +36 -8
- package/dist/api/session-end.js +71 -25
- 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} +54 -45
- 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 +27 -12
- 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 +34 -15
- 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 +18 -9
- package/dist/capture/compaction-spool.js +105 -63
- 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 +58 -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 +33 -33
- package/dist/cli/auth.js +23 -31
- 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 -5
- package/dist/cli/client.js +53 -23
- package/dist/cli/compact-resume-payload.d.ts +4 -1
- package/dist/cli/compact-resume-payload.js +12 -5
- package/dist/cli/context.js +43 -18
- package/dist/cli/continuity.d.ts +5 -5
- package/dist/cli/continuity.js +90 -107
- package/dist/cli/curate.d.ts +5 -4
- package/dist/cli/curate.js +55 -77
- package/dist/cli/dag.d.ts +1 -1
- package/dist/cli/dag.js +14 -17
- package/dist/cli/decisions.js +30 -30
- 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 +34 -10
- package/dist/cli/hook-runtime.js +41 -16
- package/dist/cli/incidents.d.ts +1 -1
- package/dist/cli/incidents.js +25 -25
- package/dist/cli/init.d.ts +1 -1
- package/dist/cli/init.js +35 -20
- 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 +5 -5
- package/dist/cli/object-verbs.js +13 -16
- 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 +17 -22
- package/dist/cli/print.js +4 -2
- package/dist/cli/projects.js +21 -11
- package/dist/cli/quality-repair-once.d.ts +1 -1
- package/dist/cli/quality-repair-once.js +7 -6
- package/dist/cli/recall.js +129 -93
- package/dist/cli/refine-llm.d.ts +15 -4
- package/dist/cli/refine-llm.js +17 -7
- package/dist/cli/remember.js +51 -55
- package/dist/cli/scheduler.d.ts +4 -1
- package/dist/cli/scheduler.js +9 -5
- package/dist/cli/serve.js +28 -18
- package/dist/cli/session-hooks.d.ts +2 -6
- package/dist/cli/session-hooks.js +140 -112
- package/dist/cli/setup.d.ts +1 -1
- package/dist/cli/setup.js +56 -34
- package/dist/cli/shared.d.ts +4 -2
- package/dist/cli/shared.js +26 -11
- 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 +16 -8
- 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 +4 -4
- package/dist/cli/transfer.js +97 -82
- package/dist/cli/usage.d.ts +1 -1
- package/dist/cli/usage.js +1 -1
- package/dist/cli/verb-row.d.ts +2 -0
- package/dist/cli/verbs/health.js +2 -0
- package/dist/cli/verbs/memory.js +47 -53
- package/dist/cli/verbs/objects.js +16 -7
- package/dist/cli/verbs/sessions.js +4 -2
- package/dist/cli/versioned-verbs.d.ts +8 -7
- package/dist/cli/versioned-verbs.js +31 -21
- package/dist/cli.js +14 -18
- package/dist/connectors/dlq.d.ts +6 -6
- package/dist/connectors/dlq.js +12 -7
- 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 -4
- 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 -5
- 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 -5
- 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 +36 -23
- package/dist/connectors/ingest.d.ts +5 -3
- package/dist/connectors/ingest.js +3 -3
- 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 -5
- 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 -4
- 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 -5
- 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 +24 -10
- package/dist/consolidate/dag-summary.js +2 -1
- package/dist/consolidate/dag.d.ts +10 -5
- package/dist/consolidate/dag.js +45 -39
- package/dist/consolidate/decay.js +19 -6
- package/dist/consolidate/dedupe.d.ts +14 -5
- package/dist/consolidate/dedupe.js +28 -17
- 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 +37 -14
- package/dist/consolidate/merge.d.ts +4 -1
- package/dist/consolidate/merge.js +47 -37
- 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 +42 -39
- package/dist/consolidate/trace.d.ts +7 -2
- package/dist/consolidate/trace.js +7 -2
- package/dist/consolidate/traces.js +27 -30
- 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 +38 -29
- 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 +22 -17
- 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 +87 -30
- package/dist/core/memory.js +82 -33
- 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 +39 -11
- package/dist/core/physics.js +71 -21
- package/dist/core/project-identity.d.ts +34 -17
- package/dist/core/project-identity.js +35 -18
- 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.d.ts +2 -2
- package/dist/dashboard/dashboard-actions.js +18 -7
- package/dist/dashboard/dashboard-queries.js +2 -7
- package/dist/dashboard/dashboard-snapshot.d.ts +2 -2
- package/dist/dashboard/dashboard-snapshot.js +5 -7
- package/dist/dashboard/dashboard.js +22 -8
- 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 -2
- package/dist/db/connect.js +8 -2
- 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 +40 -20
- 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/v11.js +1 -0
- package/dist/db/migrations/v12.js +2 -1
- package/dist/db/migrations/v14.js +2 -0
- 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 -8
- package/dist/db/physics-state.js +17 -50
- 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 +20 -5
- package/dist/db/request-stores.js +15 -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 +35 -14
- package/dist/db/wal-checkpointer.d.ts +2 -1
- package/dist/db/wal-checkpointer.js +19 -7
- package/dist/doctor.d.ts +7 -1
- package/dist/doctor.js +128 -46
- package/dist/embeddings/local.d.ts +8 -4
- package/dist/embeddings/local.js +11 -7
- package/dist/embeddings/provider.d.ts +19 -10
- package/dist/embeddings/provider.js +32 -27
- 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 +50 -0
- package/dist/entry/store-kit.js +27 -0
- package/dist/entry/testing.d.ts +6 -0
- package/dist/entry/testing.js +7 -0
- 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 +17 -7
- 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 +72 -33
- 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 +11 -10
- 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 +3 -3
- package/dist/importers/vault.js +61 -45
- package/dist/index.d.ts +33 -7
- package/dist/index.js +26 -8
- package/dist/learn/autolearn.d.ts +21 -6
- package/dist/learn/autolearn.js +57 -26
- 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 +17 -10
- 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 -6
- package/dist/learn/invalidation.js +62 -28
- 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 +21 -20
- 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 +61 -77
- 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 +59 -23
- 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 +19 -9
- 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 +12 -4
- package/dist/search/embed-memories.js +96 -58
- package/dist/search/engine.d.ts +11 -0
- package/dist/search/engine.js +14 -0
- 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 +14 -8
- package/dist/server/auth.d.ts +19 -15
- package/dist/server/auth.js +68 -38
- package/dist/server/boot.d.ts +4 -1
- package/dist/server/boot.js +115 -67
- package/dist/server/client-ip.d.ts +17 -5
- package/dist/server/client-ip.js +56 -21
- 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 +550 -97
- 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 -17
- 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 +40 -18
- package/dist/server/tls.d.ts +10 -2
- package/dist/server/tls.js +25 -5
- package/dist/server/types.d.ts +41 -24
- package/dist/server/validation.d.ts +4 -1
- package/dist/server/validation.js +22 -9
- package/dist/server.d.ts +17 -49
- package/dist/server.js +33 -40
- package/dist/sharing/global-store.d.ts +6 -12
- package/dist/sharing/global-store.js +8 -48
- package/dist/sharing/global-sync.d.ts +3 -1
- package/dist/sharing/global-sync.js +17 -7
- 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 +28 -14
- package/dist/sharing/share.d.ts +8 -4
- package/dist/sharing/share.js +40 -18
- package/dist/store/ambient.js +10 -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 +90 -41
- 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 +97 -63
- 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 +101 -37
- package/dist/store/compactions.js +35 -15
- package/dist/store/conflicts.d.ts +16 -5
- package/dist/store/conflicts.js +104 -48
- package/dist/store/connectors/dlq.d.ts +17 -5
- package/dist/store/connectors/dlq.js +58 -6
- package/dist/store/connectors/event-log.d.ts +122 -0
- package/dist/store/connectors/event-log.js +25 -0
- package/dist/store/connectors/github.d.ts +6 -3
- package/dist/store/connectors/github.js +30 -48
- package/dist/store/connectors/slack.d.ts +2 -1
- package/dist/store/connectors/slack.js +31 -47
- package/dist/store/dashboard-reads.d.ts +7 -3
- package/dist/store/dashboard-reads.js +32 -10
- package/dist/store/delete-and-batch.d.ts +17 -11
- package/dist/store/delete-and-batch.js +70 -28
- package/dist/store/delivery-recorder.d.ts +10 -7
- package/dist/store/delivery-recorder.js +70 -37
- package/dist/store/descendant-page.d.ts +2 -1
- package/dist/store/descendant-page.js +26 -10
- 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 +45 -19
- package/dist/store/embeddings/index.d.ts +13 -9
- package/dist/store/embeddings/index.js +19 -12
- package/dist/store/entry-reads.d.ts +72 -21
- package/dist/store/entry-reads.js +215 -69
- package/dist/store/entry-row.d.ts +10 -6
- package/dist/store/entry-row.js +26 -14
- package/dist/store/entry-writes.d.ts +28 -13
- package/dist/store/entry-writes.js +61 -22
- 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 +11 -12
- 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 +29 -19
- package/dist/store/graph-rows.d.ts +41 -3
- package/dist/store/graph-rows.js +10 -7
- package/dist/store/graph-view-rows.js +15 -7
- package/dist/store/graph-writes.d.ts +16 -10
- package/dist/store/graph-writes.js +59 -36
- package/dist/store/half-life.js +2 -2
- package/dist/store/handoffs.d.ts +13 -7
- package/dist/store/handoffs.js +44 -22
- 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 +4 -2
- package/dist/store/index.js +2 -1
- 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 +96 -19
- package/dist/store/narrow.d.ts +6 -0
- package/dist/store/narrow.js +11 -0
- package/dist/store/open.d.ts +6 -3
- package/dist/store/open.js +20 -10
- 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 +261 -219
- 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 +128 -64
- package/dist/store/rejected-values.d.ts +15 -10
- package/dist/store/rejected-values.js +46 -20
- 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 +20 -13
- package/dist/store/rule-sql.d.ts +7 -3
- package/dist/store/rule-sql.js +26 -13
- package/dist/store/search-rows.d.ts +16 -11
- package/dist/store/search-rows.js +54 -32
- 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 +12 -5
- 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 +9 -6
- 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 +8 -0
- package/dist/store/sqlite/held-connection.js +34 -7
- package/dist/store/sqlite/last-recall-group.d.ts +15 -0
- package/dist/store/sqlite/last-recall-group.js +62 -0
- 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.d.ts +6 -0
- package/dist/store/sqlite/maintenance-groups.js +61 -0
- 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 +97 -38
- 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 -18
- package/dist/store/sqlite/store.js +95 -33
- 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 +25 -11
- package/dist/store/summaries.js +84 -27
- 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 +8 -4
- 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 +28 -11
- 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 +7 -2
- package/dist/util/anthropic-messages.js +18 -7
- package/dist/util/atomic-write.d.ts +8 -3
- package/dist/util/atomic-write.js +36 -21
- 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 +26 -5
- package/dist/util/env.js +87 -25
- package/dist/util/format.d.ts +2 -0
- package/dist/util/format.js +4 -0
- 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 +16 -4
- package/dist/util/request-scope.js +19 -6
- 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 +11 -0
- package/dist/util/spawn-argv.js +66 -0
- package/dist/util/sql.d.ts +3 -0
- package/dist/util/sql.js +6 -0
- 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/vector-codec.d.ts +4 -0
- package/dist/util/vector-codec.js +15 -0
- 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 +4 -1
- package/scripts/postinstall.cjs +3 -1
- package/dist/api/audit.js +0 -56
- 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 -7
- package/dist/api/learn.js +0 -124
- package/dist/api/memories.d.ts +0 -23
- package/dist/api/memories.js +0 -46
- package/dist/api/objects.d.ts +0 -9
- package/dist/api/on-store.d.ts +0 -16
- package/dist/api/on-store.js +0 -38
- package/dist/api/outcome.d.ts +0 -19
- package/dist/api/outcome.js +0 -21
- package/dist/api/predictions.d.ts +0 -11
- package/dist/api/promote.d.ts +0 -36
- package/dist/api/promote.js +0 -65
- package/dist/api/recall-core.d.ts +0 -4
- package/dist/api/recall-core.js +0 -120
- 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 -10
- package/dist/cli/lenient-id.d.ts +0 -2
- package/dist/cli/lenient-id.js +0 -13
- 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 -21
- package/dist/store/sqlite/local.js +0 -39
package/dist/store/port.d.ts
CHANGED
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
import type { AmbientTallies } from '../core/ambient.js';
|
|
2
2
|
import type { AmbientStoreFilter } from './ambient.js';
|
|
3
3
|
import type { ApiKeyListRow, ApiKeyRecord, ListApiKeysOpts, NewApiKey } from './auth.js';
|
|
4
|
-
import type {
|
|
4
|
+
import type { ScopeGrantChange } from './key-writes.js';
|
|
5
|
+
import type { AppendAuditOpts, AuditEvent, AuditPrune, ListAuditAfterOpts, QueryAuditOpts } from './audit.js';
|
|
6
|
+
import type { QualityRepairResult } from './quality-repair.js';
|
|
7
|
+
import type { StoreWith } from './narrow.js';
|
|
8
|
+
import type { LocalFiles } from './port/local-files.js';
|
|
5
9
|
import type { EmbeddingIndexState } from './vector-index.js';
|
|
6
10
|
import type { Entity, Relation } from './graph-rows.js';
|
|
7
11
|
import type { ActiveGoals, GetActiveGoalsOpts, GoalRecallLogRow } from './goals.js';
|
|
@@ -17,14 +21,14 @@ import type { ClosureState } from '../core/prediction.js';
|
|
|
17
21
|
import type { QuarantineRow, QuarantineStatus } from './quarantine.js';
|
|
18
22
|
import type { ScopeActor } from '../core/recall-scope.js';
|
|
19
23
|
import type { RecallTraceInput } from './recall-trace.js';
|
|
20
|
-
import type { AmbientLoadResult, AmbientRecallRequest, ContextCandidateFilter, RecentOrigins } from './candidates.js';
|
|
21
|
-
import type { GitHubDlqInsert, GitHubRouting } from './connectors/github.js';
|
|
22
|
-
import type { SlackDlqInsert, SlackTeamRoute } from './connectors/slack.js';
|
|
24
|
+
import type { AmbientLoadResult, AmbientRecallRequest, ContextCandidateFilter, HeldText, RecentOrigins } from './candidates.js';
|
|
23
25
|
import type { StrengthenOptions } from './entry-writes.js';
|
|
26
|
+
import type { ConnectorEvents, ConnectorWrites } from './connectors/event-log.js';
|
|
24
27
|
import type { SessionEvent, TaskSnapshot } from './rows.js';
|
|
25
28
|
import type { OriginFilter, VectorCandidateSpec } from './search-rows.js';
|
|
26
29
|
import type { ContinuityKey } from './sessions.js';
|
|
27
30
|
import type { TokenUse } from './token-ledger.js';
|
|
31
|
+
import type { SessionAndAdminGroups } from './port-groups.js';
|
|
28
32
|
/** The arguments of `loadRecallSearchEntries` after the query, by name. */
|
|
29
33
|
export interface RecallSearchArgs {
|
|
30
34
|
readonly limit: number;
|
|
@@ -38,14 +42,16 @@ export interface RecallSearchArgs {
|
|
|
38
42
|
}
|
|
39
43
|
/** Everything one recall writes once its reply is decided, so a store writes it on one connection. */
|
|
40
44
|
export interface RecallWrites {
|
|
41
|
-
/** Insert or ignore on (memory_id, goal_id), so the first row wins, a duplicate
|
|
42
|
-
*
|
|
45
|
+
/** Insert or ignore on (memory_id, goal_id), so the first row wins, a duplicate
|
|
46
|
+
* inside this batch included. First drop a row whose memory_id is in no memories
|
|
47
|
+
* row of this store, whatever that row's tenant, as `localGoalRecallRows` does. */
|
|
43
48
|
readonly goalLog: readonly GoalRecallLogRow[];
|
|
44
49
|
/** In the order they happened. */
|
|
45
50
|
readonly audit: readonly AppendAuditOpts[];
|
|
46
51
|
readonly trace?: RecallTraceInput;
|
|
47
|
-
/** Nothing when `recallBoostAblated`. Each id found, in `tenantId` when set, gets the retrieval_count,
|
|
48
|
-
*
|
|
52
|
+
/** Nothing when `recallBoostAblated`. Each id found, in `tenantId` when set, gets the retrieval_count,
|
|
53
|
+
* last_retrieved, half_life_days and strength `markRetrieved` computes from the row read before any update, so a
|
|
54
|
+
* repeated id moves once. */
|
|
49
55
|
readonly strengthen?: {
|
|
50
56
|
readonly ids: readonly string[];
|
|
51
57
|
readonly opts: StrengthenOptions;
|
|
@@ -56,8 +62,9 @@ export interface VectorReads {
|
|
|
56
62
|
/** The stored model and whether any vector exists, in one snapshot. */
|
|
57
63
|
embeddingIndexState(): Promise<EmbeddingIndexState>;
|
|
58
64
|
storedVectors(ids: readonly string[]): Promise<Map<string, number[]>>;
|
|
59
|
-
/** The `spec.limit ?? 50` rows nearest `queryVector` by `rankVectorRows`, filtered by tenant (when set), kind !=
|
|
60
|
-
* `includeSuperseded`, scope per `RecallScopeFilter`, and origin '' or listed (when
|
|
65
|
+
/** The `spec.limit ?? 50` rows nearest `queryVector` by `rankVectorRows`, filtered by tenant (when set), kind !=
|
|
66
|
+
* 'archived', superseded only with `includeSuperseded`, scope per `RecallScopeFilter`, and origin '' or listed (when
|
|
67
|
+
* `spec.origin` is set). */
|
|
61
68
|
nearestEntries(queryVector: readonly number[], spec: VectorCandidateSpec): Promise<MemoryEntry[]>;
|
|
62
69
|
/** The particles of `ids` only; an empty list reads nothing. */
|
|
63
70
|
physicsParticles(ids: readonly string[]): Promise<Map<string, PhysicsParticle>>;
|
|
@@ -73,13 +80,15 @@ export interface VectorWrite {
|
|
|
73
80
|
readonly tenantId: string;
|
|
74
81
|
/** The index identity the vectors were built by, `embeddingIndexIdentity(provider.id)`. */
|
|
75
82
|
readonly model: string;
|
|
76
|
-
/** Set only by embedAll's rebuild, so a write that read the index
|
|
83
|
+
/** Set only by embedAll's rebuild, so a write that read the index
|
|
84
|
+
* state before another process rebuilt it cannot drop that rebuild. */
|
|
77
85
|
readonly replaceIndex: boolean;
|
|
78
86
|
readonly rows: readonly VectorRowWrite[];
|
|
79
87
|
}
|
|
80
88
|
export interface VectorWriteResult {
|
|
81
89
|
readonly written: number;
|
|
82
|
-
/** True when another model built the index and `replaceIndex` is false; the store then keeps nothing and `written` is
|
|
90
|
+
/** True when another model built the index and `replaceIndex` is false; the store then keeps nothing and `written` is
|
|
91
|
+
* 0. */
|
|
83
92
|
readonly modelMismatch: boolean;
|
|
84
93
|
}
|
|
85
94
|
export interface VectorBackfillQuery {
|
|
@@ -91,13 +100,15 @@ export interface VectorBackfillQuery {
|
|
|
91
100
|
/** Every tenant when unset, since the backfill covers the whole store. */
|
|
92
101
|
readonly tenantId?: string;
|
|
93
102
|
}
|
|
94
|
-
/** The writes behind embed on write and the backfill: core computes each vector,
|
|
95
|
-
*
|
|
103
|
+
/** The writes behind embed on write and the backfill: core computes each vector,
|
|
104
|
+
* the store only keeps it. A store deletes a memory's vector and particle when
|
|
105
|
+
* the memory is deleted (hippo.db does it by trigger and foreign-key cascade). */
|
|
96
106
|
export interface VectorWrites {
|
|
97
107
|
/** Memories of any kind with no vector stored under `query.model`, by id ascending in byte order. */
|
|
98
108
|
entriesWithoutVector(query: VectorBackfillQuery): Promise<MemoryEntry[]>;
|
|
99
|
-
/** In one transaction: refuses with `modelMismatch` if `replacesIndex` and not `replaceIndex`; else drops every
|
|
100
|
-
* keeps each writable row (memory in `tenantId`, finite non-empty vector)
|
|
109
|
+
/** In one transaction: refuses with `modelMismatch` if `replacesIndex` and not `replaceIndex`; else drops every
|
|
110
|
+
* vector and particle if `replacesIndex`, keeps each writable row (memory in `tenantId`, finite non-empty vector)
|
|
111
|
+
* under `model` with its particle, sets `model`. No audit row. */
|
|
101
112
|
writeVectors(write: VectorWrite): Promise<VectorWriteResult>;
|
|
102
113
|
}
|
|
103
114
|
export interface KeyRevoke {
|
|
@@ -107,12 +118,15 @@ export interface KeyRevoke {
|
|
|
107
118
|
readonly at: string;
|
|
108
119
|
}
|
|
109
120
|
export interface KeyAudit {
|
|
110
|
-
/** Sets revoked_at to `at` and appends one auth_revoke row (the key's tenant, `actor`, the key id) in one
|
|
111
|
-
*
|
|
121
|
+
/** Sets revoked_at to `at` and appends one auth_revoke row (the key's tenant, `actor`, the key id) in one
|
|
122
|
+
* transaction, then resolves to `at`. A revoked key resolves to its own revoked_at and writes nothing; a key missing
|
|
123
|
+
* from `tenantId` rejects with NotFoundError `Unknown key_id: <keyId>`. */
|
|
112
124
|
revokeApiKey(revoke: KeyRevoke): Promise<string>;
|
|
113
|
-
/** As `listAuditEventsAfter`: rows above `afterId` in ascending
|
|
125
|
+
/** As `listAuditEventsAfter`: rows above `afterId` in ascending
|
|
126
|
+
* id order, with its RangeErrors, limit clamp and tenant filter. */
|
|
114
127
|
auditEventsAfter(opts: ListAuditAfterOpts): Promise<AuditEvent[]>;
|
|
115
|
-
/** The highest audit id ever assigned, pruned rows included, 0 before the first; a tail that sees it drop knows the
|
|
128
|
+
/** The highest audit id ever assigned, pruned rows included, 0 before the first; a tail that sees it drop knows the
|
|
129
|
+
* log was restored. */
|
|
116
130
|
auditHighId(): Promise<number>;
|
|
117
131
|
}
|
|
118
132
|
/** One ambient load: the pins, the `recentNeeded` newest rows `admit` keeps, and the prompt-recall candidates. */
|
|
@@ -126,22 +140,27 @@ export interface AmbientCandidateRequest {
|
|
|
126
140
|
/** The reads behind getContext beyond the base `continuity`: its fallback handoff, candidate rows and ambient tallies.
|
|
127
141
|
* getContext with a query under an embedding provider needs `vectors` too, and answers 501 without it. */
|
|
128
142
|
export interface ContextReads {
|
|
129
|
-
/** The newest handoff of the last `maxAgeMs` that is its session's highest id, has no outcome or a partial or failed
|
|
130
|
-
*
|
|
143
|
+
/** The newest handoff of the last `maxAgeMs` that is its session's highest id, has no outcome or a partial or failed
|
|
144
|
+
* one, and passes recall's default scope deny, as `loadLatestHandoff` with `unfinishedOnly` and `scopeFilter:
|
|
145
|
+
* 'default-deny'`. Rejects an empty tenant id. */
|
|
131
146
|
unfinishedHandoff(tenantId: string, maxAgeMs: number, key: ContinuityKey | null): Promise<SessionHandoff | null>;
|
|
132
|
-
/** As `loadAmbientCandidates`; `recall` searches with the query `rarestFtsQuery` builds from FTS document counts over
|
|
133
|
-
*
|
|
147
|
+
/** As `loadAmbientCandidates`; `recall` searches with the query `rarestFtsQuery` builds from FTS document counts over
|
|
148
|
+
* every tenant's rows, and finds nothing when no term is indexed. Core keeps only `tenantId`'s rows that its own
|
|
149
|
+
* admit passes, whatever the store returns. */
|
|
134
150
|
ambientCandidates(tenantId: string, request: AmbientCandidateRequest): Promise<AmbientLoadResult>;
|
|
135
|
-
/** As `loadContextCandidates`: at most `filter.cap` live rows, pins and then the least decayed first, returned by
|
|
151
|
+
/** As `loadContextCandidates`: at most `filter.cap` live rows, pins and then the least decayed first, returned by
|
|
152
|
+
* created, then id. */
|
|
136
153
|
contextCandidates(tenantId: string, filter: ContextCandidateFilter): Promise<MemoryEntry[]>;
|
|
137
|
-
/** As `loadAmbientTallies`: one aggregate over the live, unarchived
|
|
154
|
+
/** As `loadAmbientTallies`: one aggregate over the live, unarchived
|
|
155
|
+
* rows `filter` admits, less other projects' secret-tagged rows. */
|
|
138
156
|
ambientTallies(tenantId: string, filter: AmbientStoreFilter): Promise<AmbientTallies>;
|
|
139
157
|
}
|
|
140
158
|
export interface EntryWrite {
|
|
141
159
|
readonly entry: MemoryEntry;
|
|
142
160
|
readonly actor: string;
|
|
143
161
|
}
|
|
144
|
-
/** Who acts on which of a tenant's rows; `ownScope` is the caller's
|
|
162
|
+
/** Who acts on which of a tenant's rows; `ownScope` is the caller's
|
|
163
|
+
* personal scope, so every other personal row is out of reach. */
|
|
145
164
|
export interface EntryTarget {
|
|
146
165
|
readonly tenantId: string;
|
|
147
166
|
readonly actor: string;
|
|
@@ -161,26 +180,33 @@ export interface EntryRemoval extends EntryTarget {
|
|
|
161
180
|
export interface RawArchive extends EntryRemoval {
|
|
162
181
|
readonly reason: string;
|
|
163
182
|
}
|
|
164
|
-
/** The memory-row writes behind remember, outcome, supersede, archive and forget. Each writes its audit rows in the
|
|
165
|
-
*
|
|
183
|
+
/** The memory-row writes behind remember, outcome, supersede, archive and forget. Each writes its audit rows in the
|
|
184
|
+
* write's own transaction, a child row's change marks its level 2 or 3 summary parent dirty (one summary_marked_dirty
|
|
185
|
+
* row on the flip), and the schema's rules hold. */
|
|
166
186
|
export interface EntryWrites {
|
|
167
|
-
/** Upserts the row, its full-text row and one remember row ({kind, scope}) in the entry's tenant; an id held by
|
|
168
|
-
* Content from a tenant that tombstoned it rejects with RejectedValueError
|
|
187
|
+
/** Upserts the row, its full-text row and one remember row ({kind, scope}) in the entry's tenant; an id held by
|
|
188
|
+
* another tenant rejects with ConflictError. Content from a tenant that tombstoned it rejects with RejectedValueError
|
|
189
|
+
* and writes one reject_refusal row after the rollback, best effort. */
|
|
169
190
|
writeEntry(write: EntryWrite): Promise<void>;
|
|
170
|
-
/** Per id in order, a row of the tenant within reach gets `entryAfterOutcome` (rewrite as writeEntry does) and one
|
|
171
|
-
* Each read holds the row lock to commit (SELECT ... FOR UPDATE), so a
|
|
191
|
+
/** Per id in order, a row of the tenant within reach gets `entryAfterOutcome` (rewrite as writeEntry does) and one
|
|
192
|
+
* outcome row ({good}); other ids skipped. Each read holds the row lock to commit (SELECT ... FOR UPDATE), so a
|
|
193
|
+
* concurrent supersede is not undone. Resolves to the ids applied, repeats kept. */
|
|
172
194
|
applyOutcome(outcome: OutcomeWrite): Promise<string[]>;
|
|
173
|
-
/** Sets the old row's superseded_by if it is within reach and not yet superseded (both checked in the transaction),
|
|
174
|
-
* ConflictError. Then writes the successor as writeEntry does and one supersede row
|
|
195
|
+
/** Sets the old row's superseded_by if it is within reach and not yet superseded (both checked in the transaction),
|
|
196
|
+
* else rejects NotFoundError or ConflictError. Then writes the successor as writeEntry does and one supersede row
|
|
197
|
+
* ({newId}), all or nothing. */
|
|
175
198
|
supersede(write: SupersedeWrite): Promise<void>;
|
|
176
|
-
/** Moves a raw row to raw_archive (metadata only, no content), deletes it and its full-text row and writes one
|
|
177
|
-
*
|
|
199
|
+
/** Moves a raw row to raw_archive (metadata only, no content), deletes it and its full-text row and writes one
|
|
200
|
+
* archive_raw row ({reason}); resolves to the archived_at written. A row out of reach rejects with NotFoundError
|
|
201
|
+
* `memory not found: <id>`, any other kind with BadRequestError. */
|
|
178
202
|
archiveRaw(archive: RawArchive): Promise<string>;
|
|
179
|
-
/** Deletes the row and its full-text row and writes one forget row; a raw row rejects, being append-only. A row out
|
|
180
|
-
*
|
|
203
|
+
/** Deletes the row and its full-text row and writes one forget row; a raw row rejects, being append-only. A row out
|
|
204
|
+
* of reach rejects with NotFoundError `memory not found: <id>`. Archive and forget then add one to the store-wide
|
|
205
|
+
* forgotten counter, best effort. */
|
|
181
206
|
forget(removal: EntryRemoval): Promise<void>;
|
|
182
207
|
}
|
|
183
|
-
/** A key to insert and the actor and metadata of its auth_create row, whose tenant and target are the key's. Neither
|
|
208
|
+
/** A key to insert and the actor and metadata of its auth_create row, whose tenant and target are the key's. Neither
|
|
209
|
+
* holds the plaintext. */
|
|
184
210
|
export interface KeyMint {
|
|
185
211
|
readonly key: NewApiKey;
|
|
186
212
|
readonly actor: string;
|
|
@@ -199,15 +225,21 @@ export interface KeyListQuery extends Omit<ListApiKeysOpts, 'tenantId'> {
|
|
|
199
225
|
readonly tenantId: string;
|
|
200
226
|
}
|
|
201
227
|
export interface KeyWrites {
|
|
202
|
-
/** Inserts the key and appends its auth_create row in one transaction; with either one failing, neither is written. A
|
|
203
|
-
*
|
|
228
|
+
/** Inserts the key and appends its auth_create row in one transaction; with either one failing, neither is written. A
|
|
229
|
+
* key id taken in any tenant rejects, since keys are looked up by id alone. */
|
|
204
230
|
createApiKey(mint: KeyMint): Promise<void>;
|
|
205
|
-
/** Serialized per (tenant, owner) before the count (BEGIN IMMEDIATE / pg_advisory_xact_lock): revoke the owner's
|
|
206
|
-
* then insert the key; append auth_revoke `{ replacedBy }` per revoked key,
|
|
231
|
+
/** Serialized per (tenant, owner) before the count (BEGIN IMMEDIATE / pg_advisory_xact_lock): revoke the owner's
|
|
232
|
+
* oldest live keys to `perSubject - 1`, then insert the key; append auth_revoke `{ replacedBy }` per revoked key,
|
|
233
|
+
* then auth_create. Live: unrevoked and not expired (NaN counts as expired). */
|
|
207
234
|
createSelfApiKey(mint: SelfKeyMint): Promise<string[]>;
|
|
208
|
-
/** As `listApiKeyRows`: newest inserted first, each with its scope grants; `active` drops revoked rows and an
|
|
235
|
+
/** As `listApiKeyRows`: newest inserted first, each with its scope grants; `active` drops revoked rows and an
|
|
236
|
+
* expires_at not above now's toISOString. */
|
|
209
237
|
listApiKeys(query: KeyListQuery): Promise<ApiKeyListRow[]>;
|
|
210
238
|
}
|
|
239
|
+
export interface KeyGrants {
|
|
240
|
+
/** Checks the key under the write lock; the change and its auth_grant or auth_ungrant row commit together. */
|
|
241
|
+
changeScopeGrant(change: ScopeGrantChange): Promise<void>;
|
|
242
|
+
}
|
|
211
243
|
/** A claim to save and the memory row that mirrors it into recall: core builds it with
|
|
212
244
|
* `predictionMirror` in the tenant the save names, so every store keeps the same row. */
|
|
213
245
|
export interface PredictionSave extends SavePredictionOpts {
|
|
@@ -234,23 +266,27 @@ export type PredictionListQuery = PredictionFilter & {
|
|
|
234
266
|
/** The reads and writes behind the predictions routes. createdAt and closedAt are the store's
|
|
235
267
|
* own clock at the write, as `toISOString` gives it, since the list orders createdAt as text. */
|
|
236
268
|
export interface Predictions {
|
|
237
|
-
/** In one transaction: writes `mirror` as `EntryWrites.writeEntry` does, inserts the open row under the next id, and
|
|
238
|
-
* ({prediction_id, class_tag, has_estimate, target_date}) ahead of the mirror's
|
|
269
|
+
/** In one transaction: writes `mirror` as `EntryWrites.writeEntry` does, inserts the open row under the next id, and
|
|
270
|
+
* appends one predict_create row ({prediction_id, class_tag, has_estimate, target_date}) ahead of the mirror's
|
|
271
|
+
* remember row. Resolves to the row saved. */
|
|
239
272
|
savePrediction(tenantId: string, input: PredictionSave, actor: string): Promise<Prediction>;
|
|
240
|
-
/** Closes the tenant's open row and appends one predict_close row ({prediction_id, closure_state, has_actual}) in one
|
|
241
|
-
* A missing or other-tenant id rejects with NotFoundError, an already-closed
|
|
273
|
+
/** Closes the tenant's open row and appends one predict_close row ({prediction_id, closure_state, has_actual}) in one
|
|
274
|
+
* transaction; the mirror stays as saved. A missing or other-tenant id rejects with NotFoundError, an already-closed
|
|
275
|
+
* row with BadRequestError; neither writes anything. */
|
|
242
276
|
closePrediction(tenantId: string, id: number, close: PredictionClose, actor: string): Promise<Prediction>;
|
|
243
277
|
/** The tenant's row; null for a missing id or another tenant's. No audit row. */
|
|
244
278
|
predictionById(tenantId: string, id: number): Promise<Prediction | null>;
|
|
245
|
-
/** At most `limit` rows, newest first: by createdAt compared as text in byte order, then by id, both descending, so
|
|
246
|
-
*
|
|
279
|
+
/** At most `limit` rows, newest first: by createdAt compared as text in byte order, then by id, both descending, so
|
|
280
|
+
* the order is total. `after` keeps only the rows below its (createdAt, id) pair in that order. No audit row. */
|
|
247
281
|
listPredictions(tenantId: string, query: PredictionListQuery): Promise<Prediction[]>;
|
|
248
|
-
/** `predictionBaserateOf` over the tenant's closed (not closed-unknown) rows of the class with an estimate and an
|
|
249
|
-
* float sums depend on it). Then appends one predict_baserate row ({class_tag,
|
|
282
|
+
/** `predictionBaserateOf` over the tenant's closed (not closed-unknown) rows of the class with an estimate and an
|
|
283
|
+
* actual, in ascending id order (its float sums depend on it). Then appends one predict_baserate row ({class_tag,
|
|
284
|
+
* n_closed}), also for a class with no such row. */
|
|
250
285
|
predictionBaserate(tenantId: string, classTag: string, actor: string): Promise<PredictionBaserate>;
|
|
251
286
|
}
|
|
252
|
-
/** Which of a tenant's rows of one kind a list reads: every status when `status` is
|
|
253
|
-
*
|
|
287
|
+
/** Which of a tenant's rows of one kind a list reads: every status when `status` is
|
|
288
|
+
* unset, every value of the kind's one filter column (customer, repo) when `filter`
|
|
289
|
+
* is. Neither is ever empty; a kind with no filter column ignores `filter`. */
|
|
254
290
|
export interface ObjectListQuery<K extends ObjectKind = ObjectKind> {
|
|
255
291
|
readonly status?: ObjectByKind[K]['status'];
|
|
256
292
|
readonly filter?: string;
|
|
@@ -274,11 +310,13 @@ export interface ObjectSave<K extends SavableKind = SavableKind> {
|
|
|
274
310
|
/** Stored on a successor of a versioned kind only; a first version and a decision keep none. */
|
|
275
311
|
readonly changeSummary?: string;
|
|
276
312
|
readonly actor: string;
|
|
277
|
-
/** The new row's createdAt and the replaced row's supersededAt: core's clock, as `toISOString` gives it, since the
|
|
313
|
+
/** The new row's createdAt and the replaced row's supersededAt: core's clock, as `toISOString` gives it, since the
|
|
314
|
+
* list orders createdAt as text. */
|
|
278
315
|
readonly at: string;
|
|
279
316
|
}
|
|
280
|
-
/** Why a save or close wrote nothing: the tenant holds no such row (`missing`), the row's `status` is not one the write
|
|
281
|
-
*
|
|
317
|
+
/** Why a save or close wrote nothing: the tenant holds no such row (`missing`), the row's `status` is not one the write
|
|
318
|
+
* may start from, another writer moved it between the check and the write (`raced`), or the written row could not be
|
|
319
|
+
* read back (`vanished`). Core turns each into its own error text. */
|
|
282
320
|
export type ObjectRefusal = {
|
|
283
321
|
readonly refused: 'missing';
|
|
284
322
|
} | {
|
|
@@ -314,42 +352,54 @@ export interface IncidentResolve {
|
|
|
314
352
|
/** The row's resolvedAt: core's clock, as `toISOString` gives it. */
|
|
315
353
|
readonly at: string;
|
|
316
354
|
}
|
|
317
|
-
/** `asOf` is an instant as `toISOString` gives it, so it compares as text against validFrom and validTo; `name` keeps
|
|
355
|
+
/** `asOf` is an instant as `toISOString` gives it, so it compares as text against validFrom and validTo; `name` keeps
|
|
356
|
+
* one policyName, and may be empty. */
|
|
318
357
|
export interface PoliciesInForceQuery {
|
|
319
358
|
readonly asOf: string;
|
|
320
359
|
readonly name?: string;
|
|
321
360
|
readonly limit: number;
|
|
322
361
|
}
|
|
323
|
-
/** The reads and writes behind the typed-object routes. An audit row names the
|
|
324
|
-
*
|
|
362
|
+
/** The reads and writes behind the typed-object routes. An audit row names the
|
|
363
|
+
* object under the kind's id key (decision_id, incident_id, ...). A row
|
|
364
|
+
* belongs to one tenant: another tenant's id reads as missing in every method. */
|
|
325
365
|
export interface Objects {
|
|
326
|
-
/** At most `limit` rows of the kind, newest first: by createdAt compared as text
|
|
327
|
-
*
|
|
366
|
+
/** At most `limit` rows of the kind, newest first: by createdAt compared as text
|
|
367
|
+
* in byte order, then by id, both descending, so the order is total. `after`
|
|
368
|
+
* keeps only the rows below its (createdAt, id) pair in that order. No audit row. */
|
|
328
369
|
listObjects<K extends ObjectKind>(tenantId: string, kind: K, query: ObjectListQuery<K>): Promise<ObjectByKind[K][]>;
|
|
329
370
|
/** The tenant's row; null for a missing id or another tenant's. No audit row. */
|
|
330
371
|
objectById<K extends ObjectKind>(tenantId: string, kind: K, id: number): Promise<ObjectByKind[K] | null>;
|
|
331
|
-
/** In one transaction: moves the tenant's row from a `close.from` status to closed at `close.at` and appends one
|
|
332
|
-
* After the commit a kind the graph reads has its graph rows dropped and
|
|
372
|
+
/** In one transaction: moves the tenant's row from a `close.from` status to closed at `close.at` and appends one
|
|
373
|
+
* <kind>_close row; a refusal writes nothing. After the commit a kind the graph reads has its graph rows dropped and
|
|
374
|
+
* its mirror queued for a rebuild; a failure there is logged, never thrown. */
|
|
333
375
|
closeObject<K extends ObjectKind>(tenantId: string, kind: K, id: number, close: ObjectClose<K>): Promise<ObjectByKind[K] | ObjectRefusal>;
|
|
334
|
-
/** In one transaction, in order: writes `mirror` as `EntryWrites.writeEntry` does; inserts the row active (version 1,
|
|
335
|
-
* with `supersedesId`, supersedes that row; appends the supersede and create rows. A
|
|
376
|
+
/** In one transaction, in order: writes `mirror` as `EntryWrites.writeEntry` does; inserts the row active (version 1,
|
|
377
|
+
* or the replaced row's plus one); with `supersedesId`, supersedes that row; appends the supersede and create rows. A
|
|
378
|
+
* refusal (`missing`, `status`, `raced`, `vanished`) writes nothing. */
|
|
336
379
|
saveObject<K extends SavableKind>(tenantId: string, kind: K, save: ObjectSave<K>): Promise<ObjectByKind[K] | ObjectRefusal>;
|
|
337
|
-
/** In one transaction, in order: writes `mirror` as `EntryWrites.writeEntry` does; checks each linked id is a memory
|
|
338
|
-
* under the next id; appends the incident_open row, then the mirror's remember
|
|
380
|
+
/** In one transaction, in order: writes `mirror` as `EntryWrites.writeEntry` does; checks each linked id is a memory
|
|
381
|
+
* of the tenant; inserts the row open under the next id; appends the incident_open row, then the mirror's remember
|
|
382
|
+
* row. A refusal leaves no mirror, row or audit row. */
|
|
339
383
|
openIncident(tenantId: string, open: IncidentOpen): Promise<Incident | IncidentOpenRefusal>;
|
|
340
|
-
/** In one transaction: moves the tenant's incident from open to resolved with `resolve.text` and `resolve.at`, then
|
|
341
|
-
* A refusal (`missing`, `status`, or `vanished`) writes nothing. */
|
|
384
|
+
/** In one transaction: moves the tenant's incident from open to resolved with `resolve.text` and `resolve.at`, then
|
|
385
|
+
* appends one incident_resolve row. A refusal (`missing`, `status`, or `vanished`) writes nothing. */
|
|
342
386
|
resolveIncident(tenantId: string, id: number, resolve: IncidentResolve): Promise<Incident | ObjectRefusal>;
|
|
343
|
-
/** Policies in force at `asOf` (max `limit`): not closed, validFrom <= asOf < validTo (or unset), and active or
|
|
344
|
-
* after asOf. Newest validFrom first, compared as text in byte order, then
|
|
387
|
+
/** Policies in force at `asOf` (max `limit`): not closed, validFrom <= asOf < validTo (or unset), and active or
|
|
388
|
+
* superseded by a row whose validFrom is after asOf. Newest validFrom first, compared as text in byte order, then
|
|
389
|
+
* larger id. No audit row. */
|
|
345
390
|
policiesInForce(tenantId: string, query: PoliciesInForceQuery): Promise<Policy[]>;
|
|
346
|
-
/** At most `limit` of the tenant's active skills, by skillName ascending compared as text in byte order, then by id
|
|
391
|
+
/** At most `limit` of the tenant's active skills, by skillName ascending compared as text in byte order, then by id
|
|
392
|
+
* ascending. No audit row. */
|
|
347
393
|
activeSkillsByName(tenantId: string, limit: number): Promise<Skill[]>;
|
|
348
|
-
/** At most `limit` of the tenant's memories carrying `tag` (tag list as JSON, matched between double quotes,
|
|
349
|
-
* is not project_brief and whose scope recall admits with no scope asked,
|
|
394
|
+
/** At most `limit` of the tenant's memories carrying `tag` (tag list as JSON, matched between double quotes,
|
|
395
|
+
* unescaped, ASCII case-folded) whose source is not project_brief and whose scope recall admits with no scope asked,
|
|
396
|
+
* newest first by created (text, byte order) then id. No audit row. */
|
|
350
397
|
briefReceipts(tenantId: string, tag: string, limit: number): Promise<BriefReceipt[]>;
|
|
398
|
+
/** The id of the tenant's newest `kind` row in `status` that `memoryId` mirrors, or null. No audit row. */
|
|
399
|
+
objectIdByMemory<K extends ObjectKind>(tenantId: string, kind: K, status: ObjectByKind[K]['status'], memoryId: string): Promise<number | null>;
|
|
351
400
|
}
|
|
352
|
-
/** One session's unsuperseded raw rows inside a tenant; `origins` keeps those projects' rows and rows of no project,
|
|
401
|
+
/** One session's unsuperseded raw rows inside a tenant; `origins` keeps those projects' rows and rows of no project,
|
|
402
|
+
* unset keeps every origin. */
|
|
353
403
|
export interface SessionRawQuery {
|
|
354
404
|
readonly tenantId: string;
|
|
355
405
|
readonly sessionId: string;
|
|
@@ -370,22 +420,26 @@ export type DescendantOrigin = Pick<MemoryEntry, 'scope' | 'origin_project'>;
|
|
|
370
420
|
export interface DescendantPage {
|
|
371
421
|
/** How many rows the caller reads whole, counted from the first row of the first level. */
|
|
372
422
|
readonly rows: number;
|
|
373
|
-
/** `DescendantWalk.admit` for a row under the summary, judged on
|
|
423
|
+
/** `DescendantWalk.admit` for a row under the summary, judged on
|
|
424
|
+
* these two fields alone; the two must agree on every such row. */
|
|
374
425
|
readonly admit: (row: DescendantOrigin) => boolean;
|
|
375
426
|
}
|
|
376
427
|
export interface DescendantWalk {
|
|
377
428
|
/** Levels to read under the summary. */
|
|
378
429
|
readonly depth: number;
|
|
379
|
-
/** Asked of the summary, then of each child read: a refused
|
|
430
|
+
/** Asked of the summary, then of each child read: a refused
|
|
431
|
+
* row is left out of the answer and nothing under it is read. */
|
|
380
432
|
readonly admit: (row: MemoryEntry) => boolean;
|
|
381
|
-
/** Set by a caller that shows only the first rows. A store may ignore it; one that honours it returns just those rows
|
|
433
|
+
/** Set by a caller that shows only the first rows. A store may ignore it; one that honours it returns just those rows
|
|
434
|
+
* and counts every level in `sizes`. */
|
|
382
435
|
readonly page?: DescendantPage;
|
|
383
436
|
}
|
|
384
437
|
export interface SummaryDescendants {
|
|
385
438
|
readonly summary: MemoryEntry;
|
|
386
439
|
/** The admitted rows of each level, the summary's own children first; a level with none ends the list. */
|
|
387
440
|
readonly levels: MemoryEntry[][];
|
|
388
|
-
/** Set only by a store that honoured `walk.page`: how many rows each level admits, while `levels` holds just the
|
|
441
|
+
/** Set only by a store that honoured `walk.page`: how many rows each level admits, while `levels` holds just the
|
|
442
|
+
* page, in the same order. */
|
|
389
443
|
readonly sizes?: readonly number[];
|
|
390
444
|
}
|
|
391
445
|
/** The reads behind session assembly and summary drill-down. None writes an audit row. */
|
|
@@ -396,14 +450,16 @@ export interface DagReads {
|
|
|
396
450
|
/** How many rows the session holds with no cap, under the scope rule `passesScopeFilterForRecall`
|
|
397
451
|
* applies, so the count never tells of a row the caller could not read. */
|
|
398
452
|
sessionRawCount(query: SessionRawCount): Promise<number>;
|
|
399
|
-
/** The tenant's row `id` and up to `walk.depth` levels under it, read in one call so no write of this process lands
|
|
400
|
-
* Each level lists the children of the one above, parent by parent, children by
|
|
453
|
+
/** The tenant's row `id` and up to `walk.depth` levels under it, read in one call so no write of this process lands
|
|
454
|
+
* between levels; null if no such row. Each level lists the children of the one above, parent by parent, children by
|
|
455
|
+
* created then id ascending; a row is listed once, at its first level. */
|
|
401
456
|
summaryWithDescendants(tenantId: string, id: string, walk: DescendantWalk): Promise<SummaryDescendants | null>;
|
|
402
457
|
}
|
|
403
458
|
/** The read behind the audit list. It writes no audit row. */
|
|
404
459
|
export interface AuditLog {
|
|
405
|
-
/** One tenant's rows newest first, by ts then id descending, narrowed by `op` and
|
|
406
|
-
*
|
|
460
|
+
/** One tenant's rows newest first, by ts then id descending, narrowed by `op` and
|
|
461
|
+
* by `since` (ts at or after it); `limit` is clamped to 1..10001 and defaults to
|
|
462
|
+
* 100, and `after` resumes below the (ts, id) position a page ended on. */
|
|
407
463
|
listAuditEvents(query: QueryAuditOpts): Promise<AuditEvent[]>;
|
|
408
464
|
}
|
|
409
465
|
/** What GET /ready asks of a store. */
|
|
@@ -411,6 +467,19 @@ export interface Readiness {
|
|
|
411
467
|
/** Resolves once one cheap read has answered; rejects with the store's own error when it cannot. */
|
|
412
468
|
ping(): Promise<void>;
|
|
413
469
|
}
|
|
470
|
+
/** A recall's writes when the store keeps it as its last one: `strengthen.ids` are the ids it returned. */
|
|
471
|
+
export type LastRecallWrites = RecallWrites & Required<Pick<RecallWrites, 'strengthen'>>;
|
|
472
|
+
/** The last recall a store keeps, so a later outcome can name it, and the outcome linked to a recall trace. */
|
|
473
|
+
export interface LastRecall {
|
|
474
|
+
/** entryWrites.applyOutcome, then a link from recall trace `traceId` to the ids applied; resolves to those ids. */
|
|
475
|
+
applyTracedOutcome(outcome: OutcomeWrite, traceId: number): Promise<string[]>;
|
|
476
|
+
/** applyTracedOutcome on the ids and trace of the last recall, read
|
|
477
|
+
* together so an outcome never pairs them with an older trace. */
|
|
478
|
+
applyOutcomeToLast(target: EntryTarget, good: boolean): Promise<string[]>;
|
|
479
|
+
/** finishRecall, then the ids this store lacks strengthened under `globalRoot`, then the ids and their trace saved as
|
|
480
|
+
* the last recall in one write; resolves to the trace id, null when none was asked or its write failed. */
|
|
481
|
+
finishRecall(writes: LastRecallWrites, globalRoot: string | undefined): Promise<number | null>;
|
|
482
|
+
}
|
|
414
483
|
/** Which of a tenant's quarantine records a list reads; `limit` is 100 when unset. */
|
|
415
484
|
export interface QuarantineListQuery {
|
|
416
485
|
readonly status: QuarantineStatus | 'all';
|
|
@@ -421,7 +490,8 @@ export interface QuarantineListQuery {
|
|
|
421
490
|
export interface QuarantinedMemory extends QuarantineRow {
|
|
422
491
|
readonly content: string | null;
|
|
423
492
|
}
|
|
424
|
-
/** Why a decision wrote nothing: the tenant holds no record for the id (another tenant's id reads the same), or the
|
|
493
|
+
/** Why a decision wrote nothing: the tenant holds no record for the id (another tenant's id reads the same), or the
|
|
494
|
+
* record was decided before. */
|
|
425
495
|
export type QuarantineRefusal = {
|
|
426
496
|
readonly outcome: 'not_quarantined';
|
|
427
497
|
} | {
|
|
@@ -437,23 +507,29 @@ export type QuarantineApproval = {
|
|
|
437
507
|
export type QuarantineRejection = {
|
|
438
508
|
readonly outcome: 'rejected';
|
|
439
509
|
} | QuarantineRefusal;
|
|
440
|
-
/** The review queue behind the quarantine routes. A refusal is
|
|
510
|
+
/** The review queue behind the quarantine routes. A refusal is
|
|
511
|
+
* a resolved value, never a rejection, and writes nothing. */
|
|
441
512
|
export interface Quarantine {
|
|
442
|
-
/** At most `limit` of the tenant's records, newest first (quarantinedAt as text in byte order, then memoryId, both
|
|
443
|
-
* records below its pair. 'pending' leaves out a record whose memory row is gone;
|
|
513
|
+
/** At most `limit` of the tenant's records, newest first (quarantinedAt as text in byte order, then memoryId, both
|
|
514
|
+
* descending); `after` keeps only records below its pair. 'pending' leaves out a record whose memory row is gone;
|
|
515
|
+
* every other status keeps it, with null content. No audit row. */
|
|
444
516
|
listQuarantined(tenantId: string, query: QuarantineListQuery): Promise<QuarantinedMemory[]>;
|
|
445
|
-
/** In one transaction, all or none: restores the memory's originalScope if it is in the tenant and still under
|
|
446
|
-
* marks the record approved (decidedAt from the store's clock, decidedBy `actor`); appends
|
|
517
|
+
/** In one transaction, all or none: restores the memory's originalScope if it is in the tenant and still under
|
|
518
|
+
* `quarantine:private:...`; marks the record approved (decidedAt from the store's clock, decidedBy `actor`); appends
|
|
519
|
+
* one quarantine_approve row ({originalScope}). */
|
|
447
520
|
approveQuarantined(tenantId: string, id: string, actor: string): Promise<QuarantineApproval>;
|
|
448
|
-
/** In one transaction, both or neither: marks the record rejected (decidedAt/decidedBy as approve) and appends one
|
|
449
|
-
* The memory row is not touched, so it stays under its quarantine scope and a record with no
|
|
521
|
+
/** In one transaction, both or neither: marks the record rejected (decidedAt/decidedBy as approve) and appends one
|
|
522
|
+
* quarantine_reject row. The memory row is not touched, so it stays under its quarantine scope and a record with no
|
|
523
|
+
* memory row can still be rejected. */
|
|
450
524
|
rejectQuarantined(tenantId: string, id: string, actor: string): Promise<QuarantineRejection>;
|
|
451
525
|
}
|
|
452
|
-
/** What one graph view reads. `limit` is a positive integer capping each read on its own; newest means createdAt, then
|
|
453
|
-
* when it cites no memory, or its memory is in the tenant with a null scope or one
|
|
526
|
+
/** What one graph view reads. `limit` is a positive integer capping each read on its own; newest means createdAt, then
|
|
527
|
+
* id, both descending. A row shows when it cites no memory, or its memory is in the tenant with a null scope or one
|
|
528
|
+
* `canReadScope(reader, scope)` admits; no `reader` shows every row. */
|
|
454
529
|
export interface GraphViewQuery {
|
|
455
|
-
/** Unset reads the whole graph. Set, the start entities are the first `limit` of exactly this name (lowest id first)
|
|
456
|
-
* Per 400 start ids, the newest `limit` relations with an end among them join in,
|
|
530
|
+
/** Unset reads the whole graph. Set, the start entities are the first `limit` of exactly this name (lowest id first)
|
|
531
|
+
* that show; none left answers empty. Per 400 start ids, the newest `limit` relations with an end among them join in,
|
|
532
|
+
* each adding its other end to the ids held, until `limit` ids are held. */
|
|
457
533
|
readonly entity?: string;
|
|
458
534
|
readonly limit: number;
|
|
459
535
|
readonly reader?: ScopeActor;
|
|
@@ -462,127 +538,77 @@ export interface GraphRows {
|
|
|
462
538
|
readonly entities: Entity[];
|
|
463
539
|
/** May name an entity `entities` lacks; the caller drops such a relation. */
|
|
464
540
|
readonly relations: Relation[];
|
|
465
|
-
/** Judged before a row is hidden: true when start entities, joined relations, returned relations or (whole graph)
|
|
466
|
-
* or the walk held `limit` ids with a relation still to join. */
|
|
541
|
+
/** Judged before a row is hidden: true when start entities, joined relations, returned relations or (whole graph)
|
|
542
|
+
* returned entities came back `limit` long, or the walk held `limit` ids with a relation still to join. */
|
|
467
543
|
readonly truncated: boolean;
|
|
468
544
|
}
|
|
469
545
|
/** The rows behind GET /v1/graph. */
|
|
470
546
|
export interface GraphReads {
|
|
471
|
-
/** Every read from one snapshot, then rows that do not show are dropped. Whole graph: the tenant's newest `limit`
|
|
472
|
-
* From a name: the entities of the ids held (id ascending, 400 at a time) and the newest
|
|
547
|
+
/** Every read from one snapshot, then rows that do not show are dropped. Whole graph: the tenant's newest `limit`
|
|
548
|
+
* entities and relations. From a name: the entities of the ids held (id ascending, 400 at a time) and the newest
|
|
549
|
+
* `limit` relations with both ends among those ids. */
|
|
473
550
|
graphRows(tenantId: string, query: GraphViewQuery): Promise<GraphRows>;
|
|
474
551
|
}
|
|
475
|
-
|
|
476
|
-
export type ConnectorEvent = {
|
|
477
|
-
readonly connector: 'slack';
|
|
478
|
-
readonly eventId: string;
|
|
479
|
-
} | {
|
|
480
|
-
readonly connector: 'github';
|
|
481
|
-
readonly idempotencyKey: string;
|
|
482
|
-
readonly deliveryId: string;
|
|
483
|
-
readonly eventName: string;
|
|
484
|
-
};
|
|
485
|
-
/** An entry a connector brings in. `quarantine` is the review record of flagged content, whose entry already carries its quarantine scope. */
|
|
486
|
-
export interface ConnectorWrite extends EntryWrite {
|
|
487
|
-
readonly event?: ConnectorEvent;
|
|
488
|
-
readonly quarantine?: {
|
|
489
|
-
readonly originalScope: string | null;
|
|
490
|
-
readonly reason: string;
|
|
491
|
-
};
|
|
492
|
-
}
|
|
493
|
-
/** 'duplicate': the event's key was logged before; `memoryId` is the id its log row holds, null for an event logged with no memory. */
|
|
494
|
-
export type ConnectorWriteOutcome = {
|
|
495
|
-
readonly outcome: 'written';
|
|
496
|
-
} | {
|
|
497
|
-
readonly outcome: 'duplicate';
|
|
498
|
-
readonly memoryId: string | null;
|
|
499
|
-
};
|
|
500
|
-
export interface ConnectorArchive extends RawArchive {
|
|
501
|
-
readonly event: ConnectorEvent;
|
|
502
|
-
}
|
|
503
|
-
/** A connector's writes with the rows that must commit with them: the event log row
|
|
504
|
-
* that turns a redelivery into a no-op, and the quarantine record of flagged content. */
|
|
505
|
-
export interface ConnectorWrites {
|
|
506
|
-
/** entryWrites.writeEntry plus, in its transaction: with `quarantine`, one pending record and quarantine row; with `event`, one log row. All commit or none.
|
|
507
|
-
* A key logged before resolves 'duplicate' and stores nothing (never a rejection); every other refusal is writeEntry's own, decided first. */
|
|
508
|
-
writeConnectorEntry(write: ConnectorWrite): Promise<ConnectorWriteOutcome>;
|
|
509
|
-
/** entryWrites.archiveRaw plus, in its transaction, one log row for `event` naming the archived id, so a redelivery finds it logged; a failed log write
|
|
510
|
-
* undoes the archive. A key logged before keeps its row and does not stop the archive. Reach and every rejection are archiveRaw's own. */
|
|
511
|
-
archiveConnectorEntry(archive: ConnectorArchive): Promise<string>;
|
|
512
|
-
}
|
|
513
|
-
/** What the event log holds for one event's key; `memoryId` is null for an event logged with no memory. */
|
|
514
|
-
export type ConnectorEventRecord = {
|
|
515
|
-
readonly seen: false;
|
|
516
|
-
} | {
|
|
517
|
-
readonly seen: true;
|
|
518
|
-
readonly memoryId: string | null;
|
|
519
|
-
};
|
|
520
|
-
export interface DeletionLookup {
|
|
521
|
-
readonly event: ConnectorEvent;
|
|
522
|
-
readonly artifactRef: string;
|
|
523
|
-
readonly tenantId: string;
|
|
524
|
-
}
|
|
525
|
-
/** `memoryId` is null when the tenant holds no raw row for the artifact. */
|
|
526
|
-
export type DeletionTarget = {
|
|
527
|
-
readonly seen: true;
|
|
528
|
-
} | {
|
|
529
|
-
readonly seen: false;
|
|
530
|
-
readonly memoryId: string | null;
|
|
531
|
-
};
|
|
532
|
-
export interface ArtifactArchive {
|
|
533
|
-
readonly tenantId: string;
|
|
534
|
-
readonly actor: string;
|
|
535
|
-
readonly artifactRef: string;
|
|
536
|
-
readonly reason: string;
|
|
537
|
-
readonly event: Extract<ConnectorEvent, {
|
|
538
|
-
readonly connector: 'github';
|
|
539
|
-
}>;
|
|
540
|
-
}
|
|
541
|
-
/** One payload a webhook could not use, already redacted, for the dead-letter queue of its connector. */
|
|
542
|
-
export type ConnectorDeadLetter = ({
|
|
543
|
-
readonly connector: 'slack';
|
|
544
|
-
} & SlackDlqInsert) | ({
|
|
545
|
-
readonly connector: 'github';
|
|
546
|
-
} & GitHubDlqInsert);
|
|
547
|
-
/** What a connector delivery reads and writes beside connectorWrites: the event log,
|
|
548
|
-
* tenant routing, the dead-letter queue and the archive of a deleted artifact. */
|
|
549
|
-
export interface ConnectorEvents {
|
|
550
|
-
/** The log row of the event's key, in its connector's own key space. */
|
|
551
|
-
eventRecord(event: ConnectorEvent): Promise<ConnectorEventRecord>;
|
|
552
|
-
/** Logs an event that stored no memory, so its redelivery finds it. A key logged before keeps its row, the memory id it names included. */
|
|
553
|
-
markEventSeen(event: ConnectorEvent): Promise<void>;
|
|
554
|
-
/** Both reads on one snapshot: an event logged before answers `seen`, else the raw row the
|
|
555
|
-
* tenant holds for the artifact. Another tenant's row under the same ref is never returned. */
|
|
556
|
-
deletionTarget(lookup: DeletionLookup): Promise<DeletionTarget>;
|
|
557
|
-
/** A logged event answers `duplicate` and changes nothing. Else one transaction archives every raw row of the artifact (archive_raw row each, under `actor`)
|
|
558
|
-
* and logs the event naming the first, or no memory if none; one failed archive undoes all and the log row. No reach check. */
|
|
559
|
-
archiveDeletedArtifact(archive: ArtifactArchive): Promise<{
|
|
560
|
-
readonly duplicate: boolean;
|
|
561
|
-
readonly archived: number;
|
|
562
|
-
}>;
|
|
563
|
-
/** The tenant a Slack team is registered to, or how many workspaces are registered when it is not. */
|
|
564
|
-
slackTeamRoute(teamId: string): Promise<SlackTeamRoute>;
|
|
565
|
-
/** The tenant of the installation, or of the repository when no installation is named, with the size of both routing tables. */
|
|
566
|
-
githubRouting(query: {
|
|
567
|
-
readonly installationId?: string | null;
|
|
568
|
-
readonly repoFullName?: string | null;
|
|
569
|
-
}): Promise<GitHubRouting>;
|
|
570
|
-
/** Appends the row and answers its id. */
|
|
571
|
-
parkDeadLetter(letter: ConnectorDeadLetter): Promise<number>;
|
|
572
|
-
}
|
|
552
|
+
export type { ConnectorEvent, ConnectorWrite, ConnectorWriteOutcome, ConnectorArchive, ConnectorWrites, ConnectorEventRecord, DeletionLookup, DeletionTarget, ArtifactArchive, ConnectorDeadLetter, ConnectorEvents, } from './connectors/event-log.js';
|
|
573
553
|
/** `storedVectors` with no number[] copy, for a store that holds vectors as Float32 bytes. */
|
|
574
554
|
export interface VectorViews {
|
|
575
555
|
/** The same ids and values as `VectorReads.storedVectors`, each value a Float32 view. */
|
|
576
556
|
storedVectorViews(ids: readonly string[]): Promise<Map<string, Float32Array>>;
|
|
577
557
|
}
|
|
578
|
-
|
|
579
|
-
|
|
558
|
+
export type { AgentImport, Consolidation, ContainerTx, ImportTarget, LocalFiles } from './port/local-files.js';
|
|
559
|
+
/** The reads and writes behind the memory-quality audit, its repair and audit-log retention. */
|
|
560
|
+
export interface AuditMaintenance {
|
|
561
|
+
/** Every memory of the tenant, in `loadAllEntries` order. */
|
|
562
|
+
tenantEntries(tenantId: string): Promise<MemoryEntry[]>;
|
|
563
|
+
/** The ids of every memory a typed object row names, in any tenant; an automatic pass never deletes one. */
|
|
564
|
+
objectBackedIds(): Promise<Set<string>>;
|
|
565
|
+
/** Deletes each removal's row with its own forget row, leaving a pinned, raw, kept or object-backing row; resolves to
|
|
566
|
+
* the ids deleted. */
|
|
567
|
+
deleteAutomatically(removals: readonly {
|
|
568
|
+
readonly id: string;
|
|
569
|
+
readonly reason: string;
|
|
570
|
+
}[], actor: string): Promise<string[]>;
|
|
571
|
+
/** Counts (dryRun) or deletes the tenant's audit rows before
|
|
572
|
+
* `cutoff`, then appends one audit_prune row; resolves to the count. */
|
|
573
|
+
pruneAuditRows(prune: AuditPrune): Promise<number>;
|
|
574
|
+
/** A preview, or with `apply` the moves of certain defects to dormant storage behind a backup. */
|
|
575
|
+
repairQuality(tenantId: string, apply: boolean): Promise<QualityRepairResult>;
|
|
576
|
+
/** repairQuality applied once per store; null once it ran there. */
|
|
577
|
+
repairQualityOnce(tenantId: string): Promise<QualityRepairResult | null>;
|
|
578
|
+
}
|
|
579
|
+
/** The reads and writes behind git auto-learn's batch. */
|
|
580
|
+
export interface LessonWrites {
|
|
581
|
+
/** Every memory of the tenant, in `loadAllEntries` order. */
|
|
582
|
+
tenantEntries(tenantId: string): Promise<MemoryEntry[]>;
|
|
583
|
+
/** Content, source and origin of the tenant's rows holding any of `words`, among the rows a team member or
|
|
584
|
+
* `ownScope`'s owner may touch. */
|
|
585
|
+
textsHoldingWords(tenantId: string, words: readonly string[], ownScope: string | null): Promise<HeldText[]>;
|
|
586
|
+
/** Writes each entry in one transaction; a rejected value writes
|
|
587
|
+
* its refusal row and is skipped. Resolves to the ids written. */
|
|
588
|
+
writeSkippingRejected(entries: readonly MemoryEntry[], actor: string): Promise<string[]>;
|
|
589
|
+
/** Rewrites each entry in one transaction, all or none. */
|
|
590
|
+
writeTogether(entries: readonly MemoryEntry[]): Promise<void>;
|
|
591
|
+
/** Adds `count` to the store-wide remembered counter. */
|
|
592
|
+
bumpRemembered(count: number): Promise<void>;
|
|
593
|
+
}
|
|
594
|
+
/** The optional groups: a store sets each one whole or leaves
|
|
595
|
+
* it unset, and a route or MCP tool names the one it needs. */
|
|
596
|
+
export interface StoreGroups extends SessionAndAdminGroups {
|
|
597
|
+
/** Unset on any store but hippo.db; a request then runs fenced from
|
|
598
|
+
* hippo.db, and a route or tool that names no group answers 501. */
|
|
599
|
+
readonly localFiles: LocalFiles;
|
|
600
|
+
/** Unset on a store without it, where the quality audit, its repair and audit prune answer 501. */
|
|
601
|
+
readonly auditMaintenance: AuditMaintenance;
|
|
602
|
+
/** Unset on a store without it, where git learn answers 501. */
|
|
603
|
+
readonly lessonWrites: LessonWrites;
|
|
580
604
|
/** Unset on a store built before them, where hybrid and physics recall under an embedding provider answer 501. */
|
|
581
605
|
readonly vectors: VectorReads;
|
|
582
606
|
/** Unset on a store without them, where recall scores the number[] copies `vectors` returns, to the same ranking. */
|
|
583
607
|
readonly vectorViews: VectorViews;
|
|
584
608
|
readonly keyAudit: KeyAudit;
|
|
585
609
|
readonly keyWrites: KeyWrites;
|
|
610
|
+
/** Unset on a store without it, where the CLI's auth grant and ungrant answer 501. */
|
|
611
|
+
readonly keyGrants: KeyGrants;
|
|
586
612
|
/** embedMemory and embedAll with a store need it and `vectors`. */
|
|
587
613
|
readonly vectorWrites: VectorWrites;
|
|
588
614
|
readonly entryWrites: EntryWrites;
|
|
@@ -592,59 +618,75 @@ export interface StoreGroups {
|
|
|
592
618
|
readonly auditLog: AuditLog;
|
|
593
619
|
readonly quarantine: Quarantine;
|
|
594
620
|
readonly graphReads: GraphReads;
|
|
595
|
-
/** Unset on a store built before it, where a write that carries a connector event or untrusted content answers
|
|
621
|
+
/** Unset on a store built before it, where a write that carries a connector event or untrusted content answers
|
|
622
|
+
* 501. */
|
|
596
623
|
readonly connectorWrites: ConnectorWrites;
|
|
597
624
|
/** Unset on a store built before it, where both connector webhooks answer 501. */
|
|
598
625
|
readonly connectorEvents: ConnectorEvents;
|
|
599
626
|
readonly objects: Objects;
|
|
600
627
|
/** Unset on a store built before it, where GET /ready answers 200 with `store: "unchecked"`. */
|
|
601
628
|
readonly readiness: Readiness;
|
|
629
|
+
/** Unset on a store that keeps no last recall, where outcomeForLastRecall and a traced outcome answer 501 and context
|
|
630
|
+
* writes no last recall. */
|
|
631
|
+
readonly lastRecall: LastRecall;
|
|
602
632
|
}
|
|
603
633
|
export type StoreGroup = 'base' | keyof StoreGroups;
|
|
604
634
|
export declare function hasGroup(store: HippoStore, group: StoreGroup): boolean;
|
|
605
|
-
/** The group's methods; a store without them throws
|
|
635
|
+
/** The group's methods; a store without them throws
|
|
636
|
+
* StoreNotPortedError, which answers 501 as any unported path does. */
|
|
606
637
|
export declare function requireGroup<G extends keyof StoreGroups>(store: HippoStore, group: G): StoreGroups[G];
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
638
|
+
/** Which stores a call reaches, probed once by a composition root so the api reads this instead of the disk. */
|
|
639
|
+
export interface StoreReach {
|
|
640
|
+
readonly hasLocal: boolean;
|
|
641
|
+
readonly isGlobal: boolean;
|
|
642
|
+
readonly shared: boolean;
|
|
643
|
+
readonly global?: {
|
|
644
|
+
readonly root: string;
|
|
645
|
+
readonly store: StoreWith<'contextReads'>;
|
|
646
|
+
};
|
|
611
647
|
}
|
|
648
|
+
export { isStoreBusy, STORE_BUSY_MESSAGE, StoreBusyError } from './busy.js';
|
|
612
649
|
/** What `serve()` reads and writes through. Each method is atomic and no transaction spans an
|
|
613
650
|
* await, since SQLite's lock wait blocks the event loop; a lock timeout throws `StoreBusyError`. */
|
|
614
651
|
export interface HippoStore extends Partial<StoreGroups> {
|
|
615
|
-
/**
|
|
652
|
+
/** A name for logs and errors; what a store can do is the groups it sets, `localFiles` above all. */
|
|
616
653
|
readonly kind: string;
|
|
617
654
|
/** The api_keys row for `keyId` with its scope grants, revoked or not; null when no row matches. */
|
|
618
655
|
findApiKey(keyId: string): Promise<ApiKeyRecord | null>;
|
|
619
656
|
/** Recall candidates in `loadRecallSearchEntries` order: FTS, then LIKE, then every row in scope. */
|
|
620
657
|
searchRecallEntries(query: string, args: RecallSearchArgs): Promise<MemoryEntry[]>;
|
|
621
|
-
/** The rows among the first 500 ids, a tenant narrowing them, ordered by created, then content, then id, all
|
|
622
|
-
*
|
|
658
|
+
/** The rows among the first 500 ids, a tenant narrowing them, ordered by created, then content, then id, all
|
|
659
|
+
* ascending, as `loadEntriesByIds` does; the input order is ignored. */
|
|
623
660
|
entriesByIds(ids: readonly string[], tenantId?: string): Promise<MemoryEntry[]>;
|
|
624
661
|
/** The session's active goals and their policies, read together so a goal and its policy never disagree. */
|
|
625
662
|
activeGoals(opts: GetActiveGoalsOpts): Promise<ActiveGoals>;
|
|
626
|
-
/** The first `count` (at most 200) unsuperseded raw rows a tenant, a non-empty session
|
|
627
|
-
*
|
|
663
|
+
/** The first `count` (at most 200) unsuperseded raw rows a tenant, a non-empty session
|
|
664
|
+
* id and non-null `origins` (those projects and user-global rows) must narrow, by
|
|
665
|
+
* created descending, then content and id ascending, as `loadFreshRawMemories` does. */
|
|
628
666
|
freshRawEntries(count: number, tenantId: string | undefined, sessionId: string | undefined, origins: readonly string[] | null): Promise<MemoryEntry[]>;
|
|
629
|
-
/** The newest active snapshot a non-null `key` must narrow to one owner and project (null only on an unshared
|
|
630
|
-
*
|
|
667
|
+
/** The newest active snapshot a non-null `key` must narrow to one owner and project (null only on an unshared
|
|
668
|
+
* hippo.db), then for its session the newest handoff (same key) and `eventLimit` newest events returned oldest first,
|
|
669
|
+
* each tie broken by the larger id; the caller applies scope. */
|
|
631
670
|
continuity(tenantId: string, eventLimit: number, key: ContinuityKey | null): Promise<ContinuityBlock>;
|
|
632
671
|
/** Resolves a forward claim's tokens to one class and reads its baserate, writing no audit row. */
|
|
633
672
|
planningFallacyEvidence(tenantId: string, classQueryTokens: readonly string[]): Promise<PlanningFallacyEvidence>;
|
|
634
673
|
/** Appends the rows in order, all or none. */
|
|
635
674
|
appendAuditEvents(events: readonly AppendAuditOpts[]): Promise<void>;
|
|
636
|
-
/** Writes the goal log and audit rows in one transaction and rejects with none
|
|
637
|
-
*
|
|
675
|
+
/** Writes the goal log and audit rows in one transaction and rejects with none
|
|
676
|
+
* written if it fails. Then the trace and the strengthen, each on its own: a
|
|
677
|
+
* failure there logs and still resolves, since the reply is already decided. */
|
|
638
678
|
finishRecall(writes: RecallWrites): Promise<void>;
|
|
639
|
-
/** Adds `recalled` to the one store-wide total_recalled counter,
|
|
679
|
+
/** Adds `recalled` to the one store-wide total_recalled counter,
|
|
680
|
+
* no tenant; the SQLite store also rewrites stats.json. */
|
|
640
681
|
bumpRecallStats(recalled: number): Promise<void>;
|
|
641
682
|
/** One token-ledger row. Throws, so the caller decides whether a ledger failure matters. */
|
|
642
683
|
recordTokens(use: TokenUse): Promise<void>;
|
|
643
684
|
/** Releases the store's connections; `serve()` closes only a store it made itself. */
|
|
644
685
|
close(): Promise<void>;
|
|
645
686
|
}
|
|
646
|
-
/** `T` with each method answering its value instead of a Promise of it, groups included: the port as a synchronous
|
|
647
|
-
|
|
687
|
+
/** `T` with each method answering its value instead of a Promise of it, groups included: the port as a synchronous
|
|
688
|
+
* store has it. */
|
|
689
|
+
export type Sync<T> = T extends (...args: infer A) => Promise<infer R> ? (...args: A) => R : T extends (...args: never) => void ? T : T extends object ? {
|
|
648
690
|
[K in keyof T]: Sync<T[K]>;
|
|
649
691
|
} : T;
|
|
650
692
|
export interface ContinuityBlock {
|