hippo-memory 1.69.0 → 1.70.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +5 -2
- package/dist/agent-memories/apply.d.ts +3 -3
- package/dist/agent-memories/apply.js +16 -31
- package/dist/agent-memories/claude-code.d.ts +1 -3
- package/dist/agent-memories/claude-code.js +11 -7
- package/dist/agent-memories/copilot.js +3 -2
- package/dist/agent-memories/files.js +3 -2
- package/dist/agent-memories/gemini.js +6 -5
- package/dist/agent-memories/keys.js +3 -2
- package/dist/agent-memories/legacy.d.ts +2 -2
- package/dist/agent-memories/legacy.js +2 -2
- package/dist/agent-memories/report.d.ts +1 -1
- package/dist/agent-memories/report.js +1 -1
- package/dist/agent-memories/source.d.ts +1 -1
- package/dist/agent-memories/source.js +6 -5
- package/dist/agent-memories/sync.d.ts +1 -1
- package/dist/agent-memories/sync.js +24 -33
- package/dist/agent-memories/types.d.ts +1 -1
- package/dist/api/assemble.d.ts +2 -2
- package/dist/api/assemble.js +42 -32
- package/dist/api/audit.d.ts +4 -7
- package/dist/api/audit.js +6 -20
- package/dist/api/auth.d.ts +5 -18
- package/dist/api/auth.js +44 -194
- package/dist/api/auto-sleep.d.ts +13 -0
- package/dist/api/auto-sleep.js +32 -0
- package/dist/{availability.d.ts → api/availability.d.ts} +2 -2
- package/dist/{availability.js → api/availability.js} +12 -29
- package/dist/{context-auto.js → api/context-auto.js} +2 -1
- package/dist/{context-render.d.ts → api/context-render.d.ts} +4 -4
- package/dist/{context-render.js → api/context-render.js} +7 -6
- package/dist/api/context-select.d.ts +5 -5
- package/dist/api/context-select.js +37 -45
- package/dist/api/context-types.d.ts +5 -5
- package/dist/api/context.d.ts +2 -4
- package/dist/api/context.js +48 -61
- package/dist/api/dormant.d.ts +3 -3
- package/dist/api/dormant.js +38 -107
- package/dist/api/drill-down.d.ts +2 -2
- package/dist/api/drill-down.js +37 -65
- package/dist/api/forget.d.ts +2 -11
- package/dist/api/forget.js +13 -46
- package/dist/api/goals.d.ts +1 -1
- package/dist/api/goals.js +2 -2
- package/dist/api/index.d.ts +26 -0
- package/dist/api/index.js +29 -0
- package/dist/api/instruction-detect.js +74 -0
- package/dist/api/learn.js +63 -55
- package/dist/api/ledger-db.d.ts +20 -0
- package/dist/api/ledger-db.js +79 -0
- package/dist/api/on-store.d.ts +16 -0
- package/dist/api/on-store.js +36 -0
- package/dist/api/outcome.d.ts +5 -42
- package/dist/api/outcome.js +15 -80
- package/dist/{pilot-arm.d.ts → api/pilot-arm.d.ts} +1 -1
- package/dist/{pilot-arm.js → api/pilot-arm.js} +15 -23
- package/dist/api/promote.d.ts +4 -15
- package/dist/api/promote.js +29 -106
- package/dist/{prompt-hook.d.ts → api/prompt-hook.d.ts} +7 -7
- package/dist/{prompt-hook.js → api/prompt-hook.js} +34 -53
- package/dist/api/quarantine.d.ts +5 -5
- package/dist/api/quarantine.js +30 -106
- package/dist/api/recall-core.d.ts +4 -0
- package/dist/api/recall-core.js +112 -0
- package/dist/{recall-history.js → api/recall-history.js} +30 -25
- package/dist/{recall-pipeline.d.ts → api/recall-pipeline.d.ts} +5 -5
- package/dist/{recall-pipeline.js → api/recall-pipeline.js} +47 -42
- package/dist/api/recall-record.d.ts +10 -13
- package/dist/api/recall-record.js +10 -30
- package/dist/api/recall-request.d.ts +2 -2
- package/dist/api/recall-request.js +3 -3
- package/dist/api/recall-types.d.ts +41 -16
- package/dist/api/recall.d.ts +1 -1
- package/dist/api/recall.js +39 -37
- package/dist/api/remember.d.ts +10 -12
- package/dist/api/remember.js +29 -45
- package/dist/api/session-owners.d.ts +4 -0
- package/dist/api/session-owners.js +17 -0
- package/dist/api/sleep-run.d.ts +7 -7
- package/dist/api/sleep-run.js +63 -75
- package/dist/api/sleep.d.ts +1 -1
- package/dist/api/tokens.d.ts +2 -2
- package/dist/api/tokens.js +9 -21
- package/dist/api/types.d.ts +2 -2
- package/dist/api/types.js +1 -1
- package/dist/capture/caller-session.d.ts +2 -2
- package/dist/capture/caller-session.js +8 -8
- package/dist/{capture-error.d.ts → capture/capture-error.d.ts} +2 -2
- package/dist/{capture-error.js → capture/capture-error.js} +7 -7
- package/dist/{codex-patch.js → capture/codex-patch.js} +1 -1
- package/dist/capture/command.d.ts +1 -1
- package/dist/capture/command.js +54 -41
- package/dist/capture/compact-resume-caller.d.ts +1 -1
- package/dist/capture/compact-resume-caller.js +7 -7
- package/dist/capture/compact.d.ts +4 -1
- package/dist/capture/compact.js +40 -22
- package/dist/capture/compaction-items-caller.d.ts +1 -1
- package/dist/capture/compaction-items-caller.js +7 -5
- package/dist/{compaction-items.js → capture/compaction-items.js} +27 -3
- package/dist/{compaction-record.d.ts → capture/compaction-record.d.ts} +10 -6
- package/dist/{compaction-record.js → capture/compaction-record.js} +48 -94
- package/dist/{compaction-spool.js → capture/compaction-spool.js} +17 -13
- package/dist/capture/copilot-transcript.js +1 -1
- package/dist/capture/extract.js +2 -2
- package/dist/capture/failure-caller.d.ts +2 -2
- package/dist/capture/failure-caller.js +6 -6
- package/dist/capture/failure-reading.d.ts +2 -5
- package/dist/capture/failure-reading.js +11 -12
- package/dist/{handoff-evidence.d.ts → capture/handoff-evidence.d.ts} +1 -1
- package/dist/{handoff-evidence.js → capture/handoff-evidence.js} +2 -1
- package/dist/capture/pre-compact-caller.d.ts +1 -1
- package/dist/capture/pre-compact-caller.js +2 -2
- package/dist/{session-digest.d.ts → capture/session-digest.d.ts} +1 -5
- package/dist/{session-digest.js → capture/session-digest.js} +17 -23
- package/dist/capture/session-end-caller.d.ts +2 -2
- package/dist/capture/session-end-caller.js +1 -1
- package/dist/capture/session-texts.d.ts +1 -1
- package/dist/capture/session-texts.js +5 -5
- package/dist/capture/session-worker.js +6 -4
- package/dist/{share-scrub.js → capture/share-scrub.js} +2 -2
- package/dist/capture/transcript.js +68 -74
- package/dist/capture/working-state.d.ts +0 -3
- package/dist/capture/working-state.js +7 -7
- package/dist/{audit-prune.d.ts → cli/audit-prune.d.ts} +1 -2
- package/dist/{audit-prune.js → cli/audit-prune.js} +5 -39
- package/dist/cli/audit.d.ts +2 -2
- package/dist/cli/audit.js +77 -72
- package/dist/cli/auth.d.ts +2 -1
- package/dist/cli/auth.js +18 -20
- package/dist/cli/briefs.d.ts +4 -3
- package/dist/cli/briefs.js +59 -181
- package/dist/cli/card.d.ts +2 -1
- package/dist/cli/card.js +25 -23
- package/dist/{client.d.ts → cli/client.d.ts} +1 -1
- package/dist/{client.js → cli/client.js} +1 -1
- package/dist/cli/compact-resume-payload.d.ts +8 -0
- package/dist/cli/compact-resume-payload.js +39 -0
- package/dist/cli/context.d.ts +2 -13
- package/dist/cli/context.js +41 -71
- package/dist/cli/continuity.d.ts +6 -5
- package/dist/cli/continuity.js +109 -99
- package/dist/{correction-latency.d.ts → cli/correction-latency.d.ts} +1 -1
- package/dist/cli/curate.d.ts +9 -9
- package/dist/cli/curate.js +177 -149
- package/dist/cli/dag.d.ts +4 -4
- package/dist/cli/dag.js +46 -34
- package/dist/cli/decisions.d.ts +4 -3
- package/dist/cli/decisions.js +108 -218
- package/dist/cli/eval.d.ts +1 -3
- package/dist/cli/eval.js +43 -31
- package/dist/cli/explain.d.ts +1 -1
- package/dist/cli/explain.js +35 -19
- package/dist/cli/flag-values.d.ts +25 -0
- package/dist/cli/flag-values.js +103 -0
- package/dist/cli/flags.d.ts +303 -0
- package/dist/cli/flags.js +169 -0
- package/dist/cli/goals.d.ts +2 -1
- package/dist/cli/goals.js +39 -34
- package/dist/cli/hook-runtime.d.ts +49 -0
- package/dist/cli/hook-runtime.js +155 -0
- package/dist/cli/init.d.ts +2 -1
- package/dist/cli/init.js +151 -118
- package/dist/cli/install-steps.d.ts +7 -0
- package/dist/cli/install-steps.js +110 -0
- package/dist/cli/last-sleep.d.ts +2 -1
- package/dist/cli/last-sleep.js +9 -7
- package/dist/cli/maintenance.d.ts +5 -4
- package/dist/cli/maintenance.js +31 -27
- package/dist/cli/object-verbs.d.ts +40 -0
- package/dist/cli/object-verbs.js +65 -0
- package/dist/{owner-validation.d.ts → cli/owner-validation.d.ts} +0 -1
- package/dist/{owner-validation.js → cli/owner-validation.js} +2 -2
- package/dist/cli/playbooks.d.ts +4 -3
- package/dist/cli/playbooks.js +77 -280
- package/dist/cli/print.d.ts +18 -0
- package/dist/cli/print.js +85 -0
- package/dist/cli/projects.d.ts +2 -3
- package/dist/cli/projects.js +56 -49
- package/dist/{provenance-coverage.d.ts → cli/provenance-coverage.d.ts} +1 -1
- package/dist/cli/quality-repair-once.js +4 -4
- package/dist/{quality-repair.js → cli/quality-repair.js} +23 -37
- package/dist/cli/recall.d.ts +2 -4
- package/dist/cli/recall.js +101 -150
- package/dist/{refine-llm.d.ts → cli/refine-llm.d.ts} +1 -1
- package/dist/{refine-llm.js → cli/refine-llm.js} +70 -82
- package/dist/cli/remember.d.ts +1 -3
- package/dist/cli/remember.js +124 -103
- package/dist/{scheduler.d.ts → cli/scheduler.d.ts} +3 -1
- package/dist/{scheduler.js → cli/scheduler.js} +13 -7
- package/dist/cli/serve.d.ts +1 -1
- package/dist/cli/serve.js +34 -4
- package/dist/cli/session-hooks.d.ts +4 -4
- package/dist/cli/session-hooks.js +190 -184
- package/dist/cli/setup.d.ts +2 -1
- package/dist/cli/setup.js +41 -21
- package/dist/cli/shared.d.ts +5 -95
- package/dist/cli/shared.js +18 -369
- package/dist/cli/slack.d.ts +2 -1
- package/dist/cli/slack.js +31 -55
- package/dist/cli/sleep-render.d.ts +4 -0
- package/dist/cli/sleep-render.js +61 -0
- package/dist/cli/sleep.d.ts +2 -8
- package/dist/cli/sleep.js +20 -76
- package/dist/cli/status.d.ts +3 -3
- package/dist/cli/status.js +39 -41
- package/dist/{stdin.js → cli/stdin.js} +6 -6
- package/dist/cli/transfer.d.ts +4 -4
- package/dist/cli/transfer.js +68 -42
- package/dist/cli/usage.js +4 -2
- package/dist/cli.d.ts +289 -5
- package/dist/cli.js +184 -117
- package/dist/connectors/dlq.d.ts +44 -0
- package/dist/connectors/dlq.js +30 -0
- package/dist/connectors/github/backfill.d.ts +1 -1
- package/dist/connectors/github/backfill.js +29 -66
- package/dist/connectors/github/cli-impl.js +59 -74
- package/dist/connectors/github/deletion.d.ts +5 -6
- package/dist/connectors/github/deletion.js +18 -52
- package/dist/connectors/github/dlq.d.ts +7 -61
- package/dist/connectors/github/dlq.js +19 -119
- package/dist/connectors/github/ingest.d.ts +2 -31
- package/dist/connectors/github/ingest.js +20 -83
- package/dist/connectors/github/octokit-client.d.ts +1 -1
- package/dist/connectors/github/octokit-client.js +2 -1
- package/dist/connectors/github/tenant-routing.d.ts +2 -2
- package/dist/connectors/github/tenant-routing.js +10 -36
- package/dist/connectors/github/transform.d.ts +1 -1
- package/dist/connectors/github/types.d.ts +1 -1
- package/dist/connectors/github/types.js +15 -18
- package/dist/connectors/github/webhook.d.ts +3 -2
- package/dist/connectors/github/webhook.js +84 -87
- package/dist/connectors/slack/backfill.d.ts +1 -1
- package/dist/connectors/slack/backfill.js +5 -29
- package/dist/connectors/slack/deletion.d.ts +4 -7
- package/dist/connectors/slack/deletion.js +20 -49
- package/dist/connectors/slack/dlq.d.ts +7 -49
- package/dist/connectors/slack/dlq.js +25 -118
- package/dist/connectors/slack/ingest.d.ts +5 -18
- package/dist/connectors/slack/ingest.js +27 -91
- package/dist/connectors/slack/signature.js +2 -1
- package/dist/connectors/slack/tenant-routing.d.ts +4 -1
- package/dist/connectors/slack/tenant-routing.js +13 -14
- package/dist/connectors/slack/transform.d.ts +1 -1
- package/dist/connectors/slack/types.d.ts +1 -1
- package/dist/connectors/slack/types.js +3 -12
- package/dist/connectors/slack/web-client.js +2 -2
- package/dist/connectors/slack/webhook.d.ts +3 -2
- package/dist/connectors/slack/webhook.js +75 -82
- package/dist/connectors/slack/workspaces.d.ts +4 -17
- package/dist/connectors/slack/workspaces.js +4 -34
- package/dist/consolidate/conflicts.d.ts +1 -1
- package/dist/consolidate/conflicts.js +4 -4
- package/dist/{dag.d.ts → consolidate/dag.d.ts} +1 -1
- package/dist/{dag.js → consolidate/dag.js} +60 -81
- package/dist/consolidate/decay.d.ts +2 -2
- package/dist/consolidate/decay.js +28 -22
- package/dist/{dedupe.js → consolidate/dedupe.js} +11 -19
- package/dist/consolidate/flush-units.d.ts +2 -2
- package/dist/{half-life-migration.d.ts → consolidate/half-life-migration.d.ts} +3 -9
- package/dist/consolidate/half-life-migration.js +106 -0
- package/dist/consolidate/llm-passes.js +8 -8
- package/dist/{memory-value.d.ts → consolidate/memory-value.d.ts} +7 -2
- package/dist/{memory-value.js → consolidate/memory-value.js} +9 -7
- package/dist/consolidate/merge.js +57 -54
- package/dist/{merged-row.d.ts → consolidate/merged-row.d.ts} +1 -1
- package/dist/{merged-row.js → consolidate/merged-row.js} +2 -2
- package/dist/consolidate/physics-pass.js +46 -46
- package/dist/{replay.d.ts → consolidate/replay.d.ts} +1 -1
- package/dist/{replay.js → consolidate/replay.js} +2 -2
- package/dist/consolidate/run.d.ts +7 -13
- package/dist/consolidate/run.js +6 -37
- package/dist/consolidate/sleep.d.ts +1 -1
- package/dist/consolidate/sleep.js +64 -134
- package/dist/{trace.js → consolidate/trace.js} +4 -6
- package/dist/consolidate/traces.js +34 -29
- package/dist/{ablation.js → core/ablation.js} +1 -1
- package/dist/{agent-memories/tools.d.ts → core/agent-memory-tools.d.ts} +1 -1
- package/dist/{agent-memories/tools.js → core/agent-memory-tools.js} +1 -1
- package/dist/{ambient.js → core/ambient.js} +12 -10
- package/dist/{capture-contract.d.ts → core/capture-contract.d.ts} +13 -2
- package/dist/{capture-contract.js → core/capture-contract.js} +64 -0
- package/dist/{compare.d.ts → core/compare.d.ts} +2 -0
- package/dist/{compare.js → core/compare.js} +10 -3
- package/dist/{config.d.ts → core/config.d.ts} +6 -6
- package/dist/{config.js → core/config.js} +99 -72
- package/dist/core/handoff.js +87 -0
- package/dist/{memory-quality.js → core/memory-quality.js} +1 -1
- package/dist/{memory.d.ts → core/memory.d.ts} +17 -5
- package/dist/{memory.js → core/memory.js} +110 -82
- package/dist/{physics.d.ts → core/physics.d.ts} +1 -1
- package/dist/{physics.js → core/physics.js} +2 -1
- package/dist/{project-identity.d.ts → core/project-identity.d.ts} +0 -5
- package/dist/{project-identity.js → core/project-identity.js} +5 -17
- package/dist/{project-remote.js → core/project-remote.js} +4 -4
- package/dist/{prompt-recall.js → core/prompt-recall.js} +1 -1
- package/dist/{salience.js → core/salience.js} +35 -20
- package/dist/{search/types.d.ts → core/search-types.d.ts} +2 -2
- package/dist/{search/types.js → core/search-types.js} +1 -1
- package/dist/core/session-digest-row.d.ts +5 -0
- package/dist/core/session-digest-row.js +6 -0
- package/dist/{dashboard-actions.d.ts → dashboard/dashboard-actions.d.ts} +1 -1
- package/dist/{dashboard-actions.js → dashboard/dashboard-actions.js} +5 -5
- package/dist/{dashboard-queries.d.ts → dashboard/dashboard-queries.d.ts} +7 -2
- package/dist/{dashboard-queries.js → dashboard/dashboard-queries.js} +6 -10
- package/dist/{dashboard-snapshot.d.ts → dashboard/dashboard-snapshot.d.ts} +9 -9
- package/dist/{dashboard-snapshot.js → dashboard/dashboard-snapshot.js} +101 -104
- package/dist/{dashboard.js → dashboard/dashboard.js} +124 -53
- package/dist/db/backup.js +1 -1
- package/dist/db/busy.d.ts +18 -1
- package/dist/db/busy.js +74 -9
- package/dist/db/connect.d.ts +10 -2
- package/dist/db/connect.js +43 -10
- package/dist/db/index.d.ts +9 -0
- package/dist/db/index.js +8 -0
- package/dist/db/meta.d.ts +4 -0
- package/dist/db/meta.js +11 -1
- package/dist/db/migrate.d.ts +8 -1
- package/dist/db/migrate.js +25 -30
- package/dist/db/migrations/v08.js +1 -1
- package/dist/db/migrations/v14.js +39 -35
- package/dist/db/migrations/v16.js +29 -26
- package/dist/db/migrations/v18.js +6 -5
- package/dist/db/migrations/v20.js +4 -2
- package/dist/db/migrations/v22.js +39 -36
- package/dist/db/migrations/v24.js +27 -22
- package/dist/db/migrations/v29.js +37 -32
- package/dist/db/migrations/v31.js +36 -31
- package/dist/db/migrations/v35.js +1 -1
- package/dist/db/migrations/v39.js +1 -1
- package/dist/db/migrations/v40.js +15 -14
- package/dist/db/migrations/v43.js +7 -6
- package/dist/db/migrations/v44.js +1 -1
- package/dist/db/migrations/v45.js +1 -1
- package/dist/db/migrations/v46.js +1 -1
- package/dist/db/migrations/v47.js +1 -1
- package/dist/db/migrations/v48.js +1 -1
- package/dist/db/migrations/v49.js +1 -1
- package/dist/db/migrations/v50.js +8 -7
- package/dist/db/migrations/v52.js +1 -1
- package/dist/db/open.d.ts +9 -1
- package/dist/db/open.js +21 -4
- package/dist/{physics-state.d.ts → db/physics-state.d.ts} +3 -3
- package/dist/{physics-state.js → db/physics-state.js} +9 -16
- package/dist/{raw-archive-mirror-cleanup.d.ts → db/raw-archive-mirror-cleanup.d.ts} +5 -5
- package/dist/{raw-archive-mirror-cleanup.js → db/raw-archive-mirror-cleanup.js} +11 -6
- package/dist/db/request-stores.d.ts +15 -2
- package/dist/db/request-stores.js +37 -15
- package/dist/db/tables.d.ts +2 -0
- package/dist/db/tables.js +6 -0
- package/dist/{vector-store.d.ts → db/vector-store.d.ts} +4 -2
- package/dist/{vector-store.js → db/vector-store.js} +76 -51
- package/dist/db/wal-checkpointer.d.ts +11 -0
- package/dist/db/wal-checkpointer.js +92 -0
- package/dist/doctor.js +105 -136
- package/dist/entry/json-hooks.d.ts +1 -1
- package/dist/entry/json-hooks.js +1 -1
- package/dist/entry/project-identity.d.ts +1 -1
- package/dist/entry/project-identity.js +1 -1
- package/dist/entry/session-text.d.ts +3 -3
- package/dist/entry/session-text.js +3 -3
- package/dist/{eval-stats.js → eval/eval-stats.js} +12 -9
- package/dist/{eval-suite.d.ts → eval/eval-suite.d.ts} +1 -1
- package/dist/{eval-suite.js → eval/eval-suite.js} +25 -23
- package/dist/{eval.d.ts → eval/eval.d.ts} +1 -1
- package/dist/{eval.js → eval/eval.js} +29 -22
- package/dist/{judgment.d.ts → eval/judgment.d.ts} +1 -3
- package/dist/{judgment.js → eval/judgment.js} +4 -9
- package/dist/extensions/openclaw-plugin/index.js +1 -2
- package/dist/graph/delta.d.ts +3 -2
- package/dist/graph/delta.js +9 -23
- package/dist/{graph-extract.d.ts → graph/extract.d.ts} +6 -6
- package/dist/{graph-extract.js → graph/extract.js} +37 -52
- package/dist/{graph-recall.d.ts → graph/recall.d.ts} +2 -2
- package/dist/{graph-recall.js → graph/recall.js} +55 -36
- package/dist/{graph-stream.d.ts → graph/stream.d.ts} +2 -2
- package/dist/{graph-stream.js → graph/stream.js} +9 -7
- package/dist/{graph-view.d.ts → graph/view.d.ts} +6 -3
- package/dist/{graph-view.js → graph/view.js} +127 -167
- package/dist/graph/write.d.ts +4 -76
- package/dist/graph/write.js +13 -397
- package/dist/hooks/codex-session.js +1 -1
- package/dist/hooks/codex-wrapper.js +14 -15
- package/dist/hooks/copilot.d.ts +1 -8
- package/dist/hooks/copilot.js +14 -15
- package/dist/{cli → hooks}/hook-blocks.js +1 -1
- package/dist/hooks/json-hooks.d.ts +1 -1
- package/dist/hooks/json-hooks.js +31 -122
- package/dist/hooks/opencode.js +35 -27
- package/dist/hooks/shared.d.ts +0 -4
- package/dist/hooks/shared.js +1 -5
- package/dist/importers/core.d.ts +2 -6
- package/dist/importers/core.js +41 -39
- package/dist/importers/markdown-parse.d.ts +1 -10
- package/dist/importers/markdown-parse.js +2 -19
- package/dist/importers/markdown.js +2 -1
- package/dist/importers/sources.js +50 -46
- package/dist/importers/vault.js +71 -92
- package/dist/index.d.ts +22 -22
- package/dist/index.js +21 -21
- package/dist/{autolearn.d.ts → learn/autolearn.d.ts} +2 -2
- package/dist/{autolearn.js → learn/autolearn.js} +13 -11
- package/dist/{churn-git.d.ts → learn/churn-git.d.ts} +1 -1
- package/dist/{churn-git.js → learn/churn-git.js} +6 -4
- package/dist/{extract.d.ts → learn/extract.d.ts} +1 -1
- package/dist/learn/extract.js +125 -0
- package/dist/{forward-claim-detector.d.ts → learn/forward-claim-detector.d.ts} +1 -1
- package/dist/{forward-claim-detector.js → learn/forward-claim-detector.js} +1 -1
- package/dist/{invalidation.d.ts → learn/invalidation.d.ts} +4 -0
- package/dist/{invalidation.js → learn/invalidation.js} +83 -99
- package/dist/mcp/admin-tools.d.ts +1 -1
- package/dist/mcp/admin-tools.js +37 -60
- package/dist/mcp/format.d.ts +5 -5
- package/dist/mcp/format.js +7 -6
- package/dist/mcp/framing.d.ts +6 -0
- package/dist/mcp/framing.js +11 -3
- package/dist/mcp/memory-tools.js +7 -27
- package/dist/mcp/protocol.d.ts +6 -10
- package/dist/mcp/protocol.js +8 -14
- package/dist/mcp/recall-tools.d.ts +2 -2
- package/dist/mcp/recall-tools.js +68 -50
- package/dist/mcp/request.js +62 -60
- package/dist/mcp/server.js +1 -1
- package/dist/mcp/session-state.d.ts +1 -2
- package/dist/mcp/session-state.js +2 -2
- package/dist/mcp/shared-gate.js +1 -1
- package/dist/mcp/stdio.js +69 -31
- package/dist/mcp/tool-args.js +2 -1
- package/dist/mcp/tools.js +2 -2
- package/dist/{customer-notes.d.ts → objects/customer-notes.d.ts} +7 -24
- package/dist/objects/customer-notes.js +112 -0
- package/dist/{decisions.d.ts → objects/decisions.d.ts} +13 -28
- package/dist/objects/decisions.js +101 -0
- package/dist/objects/descriptor.d.ts +52 -0
- package/dist/objects/descriptor.js +4 -0
- package/dist/objects/fields.d.ts +15 -0
- package/dist/objects/fields.js +21 -0
- package/dist/{incidents.d.ts → objects/incidents.d.ts} +17 -44
- package/dist/objects/incidents.js +130 -0
- package/dist/objects/lifecycle.d.ts +27 -0
- package/dist/objects/lifecycle.js +96 -0
- package/dist/{policies.d.ts → objects/policies.d.ts} +14 -27
- package/dist/objects/policies.js +189 -0
- package/dist/{processes.d.ts → objects/processes.d.ts} +14 -34
- package/dist/objects/processes.js +146 -0
- package/dist/{project-briefs.d.ts → objects/project-briefs.d.ts} +19 -40
- package/dist/objects/project-briefs.js +255 -0
- package/dist/{skills.d.ts → objects/skills.d.ts} +11 -26
- package/dist/objects/skills.js +156 -0
- package/dist/postinstall.js +4 -2
- package/dist/predictions/planning-fallacy.d.ts +4 -76
- package/dist/predictions/planning-fallacy.js +4 -129
- package/dist/rerankers/clef.d.ts +2 -6
- package/dist/rerankers/clef.js +27 -47
- package/dist/rerankers/cross-encoder.d.ts +0 -7
- package/dist/rerankers/cross-encoder.js +15 -23
- package/dist/rerankers/index.js +8 -7
- package/dist/rerankers/jev.d.ts +1 -4
- package/dist/rerankers/jev.js +30 -49
- package/dist/rerankers/llm.d.ts +2 -4
- package/dist/rerankers/llm.js +33 -50
- package/dist/rerankers/outage-warning.d.ts +7 -0
- package/dist/rerankers/outage-warning.js +31 -0
- package/dist/rerankers/remote.d.ts +3 -0
- package/dist/rerankers/remote.js +23 -0
- package/dist/rerankers/types.d.ts +1 -1
- package/dist/search/as-of.d.ts +1 -1
- package/dist/search/bm25-search.d.ts +2 -2
- package/dist/search/bm25-search.js +7 -7
- package/dist/search/bm25.d.ts +1 -1
- package/dist/search/bm25.js +1 -1
- package/dist/search/boosts.d.ts +5 -1
- package/dist/search/boosts.js +34 -13
- package/dist/search/breakdown.d.ts +2 -2
- package/dist/search/breakdown.js +2 -1
- package/dist/search/explain.d.ts +1 -1
- package/dist/search/explain.js +3 -2
- package/dist/search/finalize.d.ts +2 -2
- package/dist/search/finalize.js +4 -3
- package/dist/search/fusion.d.ts +1 -1
- package/dist/search/fusion.js +3 -3
- package/dist/search/hybrid-score.d.ts +2 -2
- package/dist/search/hybrid-score.js +1 -1
- package/dist/search/hybrid.d.ts +4 -4
- package/dist/search/hybrid.js +11 -8
- package/dist/{multihop.d.ts → search/multihop.d.ts} +2 -2
- package/dist/{multihop.js → search/multihop.js} +7 -5
- package/dist/{path-context.js → search/path-context.js} +3 -1
- package/dist/search/physics-search.d.ts +4 -4
- package/dist/search/physics-search.js +15 -15
- package/dist/search/rerank.d.ts +3 -3
- package/dist/search/rerank.js +4 -3
- package/dist/search/temporal.d.ts +1 -1
- package/dist/search/temporal.js +5 -2
- package/dist/search/vector.d.ts +3 -3
- package/dist/search/vector.js +17 -11
- package/dist/server/auth.d.ts +1 -1
- package/dist/server/auth.js +26 -18
- package/dist/server/boot.d.ts +24 -0
- package/dist/server/boot.js +465 -0
- package/dist/server/client-ip.d.ts +5 -1
- package/dist/server/client-ip.js +18 -6
- package/dist/server/cursor.d.ts +1 -1
- package/dist/server/cursor.js +2 -3
- package/dist/server/deadline.d.ts +13 -0
- package/dist/server/deadline.js +45 -0
- package/dist/server/key-check-bounds.d.ts +8 -0
- package/dist/server/key-check-bounds.js +46 -0
- package/dist/server/lifecycle.js +1 -1
- package/dist/server/mcp-http.d.ts +1 -4
- package/dist/server/mcp-http.js +34 -24
- package/dist/server/ready.d.ts +7 -0
- package/dist/server/ready.js +38 -0
- package/dist/server/request.d.ts +10 -4
- package/dist/server/request.js +63 -12
- package/dist/server/route-table.d.ts +15 -0
- package/dist/server/route-table.js +209 -0
- package/dist/server/routes/admin.js +13 -8
- package/dist/server/routes/customer-notes.d.ts +5 -5
- package/dist/server/routes/customer-notes.js +32 -97
- package/dist/server/routes/decisions.d.ts +5 -5
- package/dist/server/routes/decisions.js +42 -105
- package/dist/server/routes/incidents.d.ts +5 -5
- package/dist/server/routes/incidents.js +42 -95
- package/dist/server/routes/memories.js +12 -14
- package/dist/server/routes/object-routes.d.ts +40 -0
- package/dist/server/routes/object-routes.js +80 -0
- package/dist/server/routes/policies.d.ts +6 -6
- package/dist/server/routes/policies.js +40 -124
- package/dist/server/routes/predictions.js +29 -45
- package/dist/server/routes/processes.d.ts +5 -5
- package/dist/server/routes/processes.js +38 -118
- package/dist/server/routes/project-briefs.d.ts +6 -6
- package/dist/server/routes/project-briefs.js +38 -110
- package/dist/server/routes/recall.js +14 -12
- package/dist/server/routes/skills.d.ts +6 -6
- package/dist/server/routes/skills.js +37 -125
- package/dist/{server-detect.js → server/server-detect.js} +1 -1
- package/dist/server/sleep-child.d.ts +2 -0
- package/dist/server/sleep-child.js +19 -0
- package/dist/server/sleep-offload.d.ts +20 -0
- package/dist/server/sleep-offload.js +70 -0
- package/dist/server/tls.d.ts +6 -0
- package/dist/server/tls.js +24 -0
- package/dist/server/types.d.ts +27 -8
- package/dist/server/validation.d.ts +3 -4
- package/dist/server/validation.js +6 -11
- package/dist/server.d.ts +39 -61
- package/dist/server.js +24 -568
- package/dist/{project-merge.d.ts → sharing/project-merge.d.ts} +1 -1
- package/dist/{project-merge.js → sharing/project-merge.js} +26 -45
- package/dist/{scope.js → sharing/scope.js} +1 -1
- package/dist/{shared.d.ts → sharing/shared.d.ts} +10 -9
- package/dist/{shared.js → sharing/shared.js} +100 -77
- package/dist/{ambient-store.d.ts → store/ambient.d.ts} +2 -2
- package/dist/{ambient-store.js → store/ambient.js} +10 -10
- package/dist/store/audit-event.d.ts +11 -5
- package/dist/store/audit-event.js +5 -4
- package/dist/{audit.d.ts → store/audit.d.ts} +27 -3
- package/dist/{audit.js → store/audit.js} +91 -6
- package/dist/{auth.d.ts → store/auth.d.ts} +15 -32
- package/dist/{auth.js → store/auth.js} +100 -92
- package/dist/store/candidates.d.ts +23 -12
- package/dist/store/candidates.js +87 -35
- package/dist/{card-detail.d.ts → store/card-detail.d.ts} +3 -3
- package/dist/{card-detail.js → store/card-detail.js} +1 -1
- package/dist/{store-cards.d.ts → store/cards.d.ts} +14 -9
- package/dist/{store-cards.js → store/cards.js} +85 -146
- package/dist/store/compactions.d.ts +78 -0
- package/dist/store/compactions.js +93 -0
- package/dist/store/conflicts.d.ts +22 -5
- package/dist/store/conflicts.js +160 -109
- package/dist/store/connectors/github.d.ts +84 -0
- package/dist/store/connectors/github.js +180 -0
- package/dist/store/connectors/slack.d.ts +69 -0
- package/dist/store/connectors/slack.js +177 -0
- package/dist/store/dashboard-reads.d.ts +27 -0
- package/dist/store/dashboard-reads.js +92 -0
- package/dist/store/delete-and-batch.d.ts +20 -24
- package/dist/store/delete-and-batch.js +64 -40
- package/dist/{delivery-recorder.d.ts → store/delivery-recorder.d.ts} +12 -5
- package/dist/{delivery-recorder.js → store/delivery-recorder.js} +42 -30
- package/dist/store/descendant-page.d.ts +12 -0
- package/dist/store/descendant-page.js +99 -0
- package/dist/store/diagnostics.d.ts +47 -0
- package/dist/store/diagnostics.js +51 -0
- package/dist/store/doctor-reads.d.ts +16 -0
- package/dist/store/doctor-reads.js +19 -0
- package/dist/{dormant.d.ts → store/dormant.d.ts} +46 -12
- package/dist/{dormant.js → store/dormant.js} +151 -6
- package/dist/{embeddings.d.ts → store/embeddings/index.d.ts} +10 -6
- package/dist/{embeddings.js → store/embeddings/index.js} +60 -44
- package/dist/{local-embedding.d.ts → store/embeddings/local.d.ts} +1 -1
- package/dist/{local-embedding.js → store/embeddings/local.js} +68 -57
- package/dist/{embedding-provider.d.ts → store/embeddings/provider.d.ts} +2 -2
- package/dist/{embedding-provider.js → store/embeddings/provider.js} +47 -32
- package/dist/store/entry-reads.d.ts +46 -7
- package/dist/store/entry-reads.js +120 -21
- package/dist/store/entry-row.d.ts +8 -2
- package/dist/store/entry-row.js +28 -8
- package/dist/store/entry-writes.d.ts +33 -4
- package/dist/store/entry-writes.js +108 -26
- package/dist/{failure-log.d.ts → store/failure-log.d.ts} +7 -2
- package/dist/{failure-log.js → store/failure-log.js} +9 -2
- package/dist/{goals.d.ts → store/goals.d.ts} +6 -46
- package/dist/{goals.js → store/goals.js} +45 -94
- package/dist/store/graph-queue.d.ts +29 -0
- package/dist/store/graph-queue.js +101 -0
- package/dist/{graph/read.d.ts → store/graph-reads.d.ts} +26 -34
- package/dist/{graph/read.js → store/graph-reads.js} +63 -115
- package/dist/{graph/types.d.ts → store/graph-rows.d.ts} +68 -8
- package/dist/{graph/rows.js → store/graph-rows.js} +14 -3
- package/dist/store/graph-view-rows.d.ts +12 -0
- package/dist/store/graph-view-rows.js +67 -0
- package/dist/store/graph-writes.d.ts +58 -0
- package/dist/store/graph-writes.js +256 -0
- package/dist/store/half-life.d.ts +34 -0
- package/dist/store/half-life.js +77 -0
- package/dist/store/handoffs.d.ts +1 -1
- package/dist/store/handoffs.js +39 -30
- package/dist/store/index-and-stats.d.ts +8 -1
- package/dist/store/index-and-stats.js +51 -48
- package/dist/store/index.d.ts +4 -0
- package/dist/store/index.js +3 -0
- package/dist/store/key-audit.d.ts +2 -2
- package/dist/store/key-audit.js +4 -4
- package/dist/store/key-writes.d.ts +12 -5
- package/dist/store/key-writes.js +30 -4
- package/dist/store/ledger-turn.d.ts +17 -0
- package/dist/store/ledger-turn.js +27 -0
- package/dist/store/markdown.d.ts +1 -1
- package/dist/store/markdown.js +4 -3
- package/dist/store/mirrors.d.ts +5 -7
- package/dist/store/mirrors.js +39 -25
- package/dist/store/object-types.d.ts +189 -0
- package/dist/store/object-types.js +4 -0
- package/dist/store/open.d.ts +6 -4
- package/dist/store/open.js +24 -23
- package/dist/store/planning-fallacy-evidence.d.ts +42 -0
- package/dist/store/planning-fallacy-evidence.js +81 -0
- package/dist/store/port.d.ts +646 -0
- package/dist/store/port.js +17 -0
- package/dist/{predictions/store.d.ts → store/predictions.d.ts} +15 -2
- package/dist/{predictions/store.js → store/predictions.js} +52 -67
- package/dist/{quarantine.d.ts → store/quarantine.d.ts} +8 -8
- package/dist/{quarantine.js → store/quarantine.js} +64 -22
- package/dist/{raw-archive.d.ts → store/raw-archive.d.ts} +3 -1
- package/dist/{raw-archive.js → store/raw-archive.js} +6 -2
- package/dist/{recall-scope.d.ts → store/recall-scope.d.ts} +2 -2
- package/dist/{recall-scope.js → store/recall-scope.js} +3 -3
- package/dist/{recall-trace.d.ts → store/recall-trace.d.ts} +13 -14
- package/dist/{recall-trace.js → store/recall-trace.js} +38 -43
- package/dist/store/rejected-values.d.ts +55 -0
- package/dist/store/rejected-values.js +162 -0
- package/dist/{rejection.d.ts → store/rejection.d.ts} +2 -2
- package/dist/{rejection.js → store/rejection.js} +3 -2
- package/dist/store/rows.d.ts +2 -3
- package/dist/store/rows.js +18 -11
- package/dist/store/search-rows.d.ts +15 -4
- package/dist/store/search-rows.js +41 -28
- package/dist/store/sessions.d.ts +13 -2
- package/dist/store/sessions.js +79 -45
- package/dist/store/sqlite/commit-watch.d.ts +4 -0
- package/dist/store/sqlite/commit-watch.js +29 -0
- package/dist/store/sqlite/connector-events-group.d.ts +5 -0
- package/dist/store/sqlite/connector-events-group.js +50 -0
- package/dist/store/sqlite/connector-writes-group.d.ts +6 -0
- package/dist/store/sqlite/connector-writes-group.js +65 -0
- package/dist/store/sqlite/dag-reads-group.d.ts +3 -0
- package/dist/store/sqlite/dag-reads-group.js +45 -0
- package/dist/store/sqlite/entry-writes-group.d.ts +18 -0
- package/dist/store/{entry-writes-group.js → sqlite/entry-writes-group.js} +73 -60
- package/dist/store/sqlite/error-codec.d.ts +17 -0
- package/dist/store/sqlite/error-codec.js +59 -0
- package/dist/store/sqlite/executor-counts.d.ts +10 -0
- package/dist/store/sqlite/executor-counts.js +11 -0
- package/dist/store/sqlite/executor.d.ts +28 -0
- package/dist/store/sqlite/executor.js +286 -0
- package/dist/store/sqlite/graph-reads-group.d.ts +5 -0
- package/dist/store/sqlite/graph-reads-group.js +18 -0
- package/dist/store/sqlite/local.d.ts +21 -0
- package/dist/store/sqlite/local.js +38 -0
- package/dist/store/sqlite/object-rows.d.ts +102 -0
- package/dist/store/sqlite/object-rows.js +218 -0
- package/dist/store/sqlite/objects-group.d.ts +20 -0
- package/dist/store/sqlite/objects-group.js +314 -0
- package/dist/store/sqlite/predictions-group.d.ts +5 -0
- package/dist/store/sqlite/predictions-group.js +28 -0
- package/dist/store/sqlite/quarantine-group.d.ts +5 -0
- package/dist/store/sqlite/quarantine-group.js +38 -0
- package/dist/store/sqlite/store.d.ts +26 -0
- package/dist/store/sqlite/store.js +295 -0
- package/dist/store/sqlite/vector-pack.d.ts +18 -0
- package/dist/store/sqlite/vector-pack.js +46 -0
- package/dist/store/sqlite/vector-reads-group.d.ts +3 -0
- package/dist/store/sqlite/vector-reads-group.js +23 -0
- package/dist/store/sqlite/worker-entry.d.ts +2 -0
- package/dist/store/sqlite/worker-entry.js +8 -0
- package/dist/store/sqlite/worker-jobs.d.ts +5 -0
- package/dist/store/sqlite/worker-jobs.js +116 -0
- package/dist/store/sqlite/worker-ops.d.ts +124 -0
- package/dist/store/sqlite/worker-ops.js +82 -0
- package/dist/store/sqlite/worker-store.d.ts +8 -0
- package/dist/store/sqlite/worker-store.js +76 -0
- package/dist/store/summaries.d.ts +2 -11
- package/dist/store/summaries.js +17 -44
- package/dist/{summary-dirty.d.ts → store/summary-dirty.d.ts} +1 -1
- package/dist/store/tenant-lookup.d.ts +1 -1
- package/dist/{tenant.d.ts → store/tenant.d.ts} +2 -2
- package/dist/{tenant.js → store/tenant.js} +1 -1
- package/dist/store/token-ledger-rows.d.ts +61 -0
- package/dist/store/token-ledger-rows.js +68 -0
- package/dist/{token-ledger.d.ts → store/token-ledger.d.ts} +2 -9
- package/dist/{token-ledger.js → store/token-ledger.js} +31 -78
- package/dist/store/tombstone-checks.d.ts +12 -0
- package/dist/store/tombstone-checks.js +31 -0
- package/dist/store/usage-reports.d.ts +7 -0
- package/dist/store/usage-reports.js +26 -0
- package/dist/store/vector-writes.d.ts +10 -3
- package/dist/store/vector-writes.js +35 -5
- package/dist/{working-memory.d.ts → store/working-memory.d.ts} +5 -1
- package/dist/{working-memory.js → store/working-memory.js} +39 -41
- package/dist/support-bundle.d.ts +1 -1
- package/dist/support-bundle.js +13 -33
- package/dist/{gated-write.d.ts → trust/gated-write.d.ts} +2 -2
- package/dist/{gated-write.js → trust/gated-write.js} +6 -6
- package/dist/trust/quarantine.d.ts +4 -0
- package/dist/trust/quarantine.js +8 -0
- package/dist/trust/reject-flow.d.ts +23 -0
- package/dist/trust/reject-flow.js +67 -0
- package/dist/util/anthropic-messages.d.ts +31 -0
- package/dist/util/anthropic-messages.js +46 -0
- package/dist/util/atomic-write.d.ts +3 -0
- package/dist/util/atomic-write.js +107 -0
- package/dist/util/crash-handlers.d.ts +5 -0
- package/dist/util/crash-handlers.js +30 -0
- package/dist/{env.d.ts → util/env.d.ts} +15 -2
- package/dist/{env.js → util/env.js} +20 -2
- package/dist/util/home-path.js +67 -0
- package/dist/{http-retry.d.ts → util/http-retry.d.ts} +6 -2
- package/dist/{http-retry.js → util/http-retry.js} +38 -7
- package/dist/{http-util.d.ts → util/http-util.d.ts} +14 -3
- package/dist/{http-util.js → util/http-util.js} +31 -11
- package/dist/util/json.d.ts +17 -0
- package/dist/util/json.js +25 -0
- package/dist/{log.d.ts → util/log.d.ts} +5 -2
- package/dist/{log.js → util/log.js} +12 -3
- package/dist/util/real-path.d.ts +3 -0
- package/dist/util/real-path.js +15 -0
- package/dist/util/request-scope.d.ts +27 -0
- package/dist/util/request-scope.js +47 -0
- package/dist/{same-text.d.ts → util/same-text.d.ts} +1 -1
- package/dist/{secret-detect.js → util/secret-detect.js} +5 -4
- package/dist/util/stored-json.d.ts +9 -0
- package/dist/util/stored-json.js +8 -0
- package/dist/util/time.d.ts +2 -0
- package/dist/util/time.js +3 -0
- package/dist/util/token-text.d.ts +18 -0
- package/dist/util/token-text.js +23 -0
- package/dist/{version.d.ts → util/version.d.ts} +1 -1
- package/dist/{version.js → util/version.js} +1 -1
- package/extensions/openclaw-plugin/index.ts +1 -5
- package/extensions/openclaw-plugin/openclaw.plugin.json +1 -1
- package/extensions/openclaw-plugin/package.json +1 -1
- package/openclaw.plugin.json +1 -1
- package/package.json +2 -2
- package/dist/api.d.ts +0 -26
- package/dist/api.js +0 -29
- package/dist/connectors/github/idempotency.d.ts +0 -19
- package/dist/connectors/github/idempotency.js +0 -27
- package/dist/connectors/slack/idempotency.d.ts +0 -17
- package/dist/connectors/slack/idempotency.js +0 -31
- package/dist/customer-notes.js +0 -336
- package/dist/db.d.ts +0 -9
- package/dist/db.js +0 -8
- package/dist/decisions.js +0 -326
- package/dist/extract.js +0 -133
- package/dist/graph/rows.d.ts +0 -45
- package/dist/graph/types.js +0 -11
- package/dist/half-life-migration.js +0 -182
- package/dist/handoff.js +0 -68
- package/dist/home-path.js +0 -24
- package/dist/incidents.js +0 -349
- package/dist/instruction-detect.js +0 -27
- package/dist/json.d.ts +0 -7
- package/dist/json.js +0 -11
- package/dist/ledger-db.d.ts +0 -10
- package/dist/ledger-db.js +0 -42
- package/dist/policies.js +0 -434
- package/dist/processes.js +0 -371
- package/dist/project-briefs.js +0 -523
- package/dist/reject-flow.d.ts +0 -69
- package/dist/reject-flow.js +0 -260
- package/dist/session-owners.d.ts +0 -7
- package/dist/session-owners.js +0 -54
- package/dist/skills.js +0 -367
- package/dist/store/entry-writes-group.d.ts +0 -9
- package/dist/store-port.d.ts +0 -262
- package/dist/store-port.js +0 -178
- /package/dist/{context-auto.d.ts → api/context-auto.d.ts} +0 -0
- /package/dist/{instruction-detect.d.ts → api/instruction-detect.d.ts} +0 -0
- /package/dist/{recall-history.d.ts → api/recall-history.d.ts} +0 -0
- /package/dist/{codex-patch.d.ts → capture/codex-patch.d.ts} +0 -0
- /package/dist/{compaction-items.d.ts → capture/compaction-items.d.ts} +0 -0
- /package/dist/{compaction-spool.d.ts → capture/compaction-spool.d.ts} +0 -0
- /package/dist/{share-scrub.d.ts → capture/share-scrub.d.ts} +0 -0
- /package/dist/{correction-latency.js → cli/correction-latency.js} +0 -0
- /package/dist/{provenance-coverage.js → cli/provenance-coverage.js} +0 -0
- /package/dist/{quality-repair.d.ts → cli/quality-repair.d.ts} +0 -0
- /package/dist/{stdin.d.ts → cli/stdin.d.ts} +0 -0
- /package/dist/{dedupe.d.ts → consolidate/dedupe.d.ts} +0 -0
- /package/dist/{memory-value-weights.d.ts → consolidate/memory-value-weights.d.ts} +0 -0
- /package/dist/{memory-value-weights.js → consolidate/memory-value-weights.js} +0 -0
- /package/dist/{overlap-index.d.ts → consolidate/overlap-index.d.ts} +0 -0
- /package/dist/{overlap-index.js → consolidate/overlap-index.js} +0 -0
- /package/dist/{trace.d.ts → consolidate/trace.d.ts} +0 -0
- /package/dist/{ablation.d.ts → core/ablation.d.ts} +0 -0
- /package/dist/{ambient.d.ts → core/ambient.d.ts} +0 -0
- /package/dist/{api-errors.d.ts → core/api-errors.d.ts} +0 -0
- /package/dist/{api-errors.js → core/api-errors.js} +0 -0
- /package/dist/{card.d.ts → core/card.d.ts} +0 -0
- /package/dist/{card.js → core/card.js} +0 -0
- /package/dist/{handoff.d.ts → core/handoff.d.ts} +0 -0
- /package/dist/{memory-quality.d.ts → core/memory-quality.d.ts} +0 -0
- /package/dist/{physics-config.d.ts → core/physics-config.d.ts} +0 -0
- /package/dist/{physics-config.js → core/physics-config.js} +0 -0
- /package/dist/{project-remote.d.ts → core/project-remote.d.ts} +0 -0
- /package/dist/{prompt-recall.d.ts → core/prompt-recall.d.ts} +0 -0
- /package/dist/{salience.d.ts → core/salience.d.ts} +0 -0
- /package/dist/{dashboard-params.d.ts → dashboard/dashboard-params.d.ts} +0 -0
- /package/dist/{dashboard-params.js → dashboard/dashboard-params.js} +0 -0
- /package/dist/{dashboard-types.d.ts → dashboard/dashboard-types.d.ts} +0 -0
- /package/dist/{dashboard-types.js → dashboard/dashboard-types.js} +0 -0
- /package/dist/{dashboard.d.ts → dashboard/dashboard.d.ts} +0 -0
- /package/dist/{eval-stats.d.ts → eval/eval-stats.d.ts} +0 -0
- /package/dist/{cli → hooks}/hook-blocks.d.ts +0 -0
- /package/dist/{path-context.d.ts → search/path-context.d.ts} +0 -0
- /package/dist/{rrf.d.ts → search/rrf.d.ts} +0 -0
- /package/dist/{rrf.js → search/rrf.js} +0 -0
- /package/dist/{rate-limit.d.ts → server/rate-limit.d.ts} +0 -0
- /package/dist/{rate-limit.js → server/rate-limit.js} +0 -0
- /package/dist/{server-detect.d.ts → server/server-detect.d.ts} +0 -0
- /package/dist/{scope.d.ts → sharing/scope.d.ts} +0 -0
- /package/dist/{summary-dirty.js → store/summary-dirty.js} +0 -0
- /package/dist/{yaml.d.ts → store/yaml.d.ts} +0 -0
- /package/dist/{yaml.js → store/yaml.js} +0 -0
- /package/dist/{escape.d.ts → util/escape.d.ts} +0 -0
- /package/dist/{escape.js → util/escape.js} +0 -0
- /package/dist/{home-path.d.ts → util/home-path.d.ts} +0 -0
- /package/dist/{keyset.d.ts → util/keyset.d.ts} +0 -0
- /package/dist/{keyset.js → util/keyset.js} +0 -0
- /package/dist/{same-text.js → util/same-text.js} +0 -0
- /package/dist/{secret-detect.d.ts → util/secret-detect.d.ts} +0 -0
- /package/dist/{db → util}/sqlite-blocked.d.ts +0 -0
- /package/dist/{db → util}/sqlite-blocked.js +0 -0
- /package/dist/{tokenize.d.ts → util/tokenize.d.ts} +0 -0
- /package/dist/{tokenize.js → util/tokenize.js} +0 -0
- /package/dist/{transcript-tail.d.ts → util/transcript-tail.d.ts} +0 -0
- /package/dist/{transcript-tail.js → util/transcript-tail.js} +0 -0
- /package/dist/{write-budget.d.ts → util/write-budget.d.ts} +0 -0
- /package/dist/{write-budget.js → util/write-budget.js} +0 -0
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import { type DatabaseSyncLike } from '../../db/index.js';
|
|
2
|
+
/** One github_event_log row to write; `memoryId` is null for an event that produced no memory. */
|
|
3
|
+
export interface GithubEventLogEntry {
|
|
4
|
+
idempotencyKey: string;
|
|
5
|
+
deliveryId: string;
|
|
6
|
+
eventName: string;
|
|
7
|
+
memoryId: string | null;
|
|
8
|
+
}
|
|
9
|
+
export declare function eventSeenAt(db: DatabaseSyncLike, idempotencyKey: string): boolean;
|
|
10
|
+
export declare function eventMemoryAt(db: DatabaseSyncLike, idempotencyKey: string): string | null;
|
|
11
|
+
/** False when the key was already logged, so a caller inside a write scope can roll its own row back. */
|
|
12
|
+
export declare function logEventAt(db: DatabaseSyncLike, entry: GithubEventLogEntry): boolean;
|
|
13
|
+
/** The memory an already-seen key points at, or null when the key is new. */
|
|
14
|
+
export declare function seenEvent(hippoRoot: string, idempotencyKey: string): {
|
|
15
|
+
memoryId: string | null;
|
|
16
|
+
} | null;
|
|
17
|
+
export declare function logEvent(hippoRoot: string, entry: GithubEventLogEntry): void;
|
|
18
|
+
export interface ArtifactDeletion {
|
|
19
|
+
tenantId: string;
|
|
20
|
+
artifactRef: string;
|
|
21
|
+
idempotencyKey: string;
|
|
22
|
+
deliveryId: string;
|
|
23
|
+
eventName: string;
|
|
24
|
+
reason: string;
|
|
25
|
+
who: string;
|
|
26
|
+
}
|
|
27
|
+
/** Archives every active raw row of one tenant's artifact and logs the delete event; a failed archive rolls back the batch and the log row. */
|
|
28
|
+
export declare function archiveDeletedArtifact(hippoRoot: string, del: ArtifactDeletion): {
|
|
29
|
+
duplicate: boolean;
|
|
30
|
+
archived: number;
|
|
31
|
+
};
|
|
32
|
+
export type DlqBucket = 'parse_error' | 'unroutable' | 'signature_failed' | 'unhandled';
|
|
33
|
+
export interface DlqItem {
|
|
34
|
+
id: number;
|
|
35
|
+
tenantId: string;
|
|
36
|
+
rawPayload: string;
|
|
37
|
+
error: string;
|
|
38
|
+
eventName: string | null;
|
|
39
|
+
deliveryId: string | null;
|
|
40
|
+
signature: string | null;
|
|
41
|
+
installationId: string | null;
|
|
42
|
+
repoFullName: string | null;
|
|
43
|
+
retryCount: number;
|
|
44
|
+
receivedAt: string;
|
|
45
|
+
retriedAt: string | null;
|
|
46
|
+
bucket: DlqBucket | string;
|
|
47
|
+
}
|
|
48
|
+
/** One github_dlq row to write, already redacted by the caller; the four GitHub-only columns are stored NULL when left out. */
|
|
49
|
+
export interface GithubDlqWrite {
|
|
50
|
+
tenantId: string;
|
|
51
|
+
rawPayload: string;
|
|
52
|
+
error: string;
|
|
53
|
+
eventName?: string | null;
|
|
54
|
+
deliveryId?: string | null;
|
|
55
|
+
signature: string | null;
|
|
56
|
+
installationId?: string | null;
|
|
57
|
+
repoFullName?: string | null;
|
|
58
|
+
bucket: DlqBucket;
|
|
59
|
+
}
|
|
60
|
+
export declare function insertDlq(hippoRoot: string, row: GithubDlqWrite): number;
|
|
61
|
+
export declare function listDlqRows(hippoRoot: string, tenantId: string, limit: number): DlqItem[];
|
|
62
|
+
export declare function dlqEntry(hippoRoot: string, id: number): DlqItem | null;
|
|
63
|
+
export declare function bumpDlqRetry(hippoRoot: string, id: number): void;
|
|
64
|
+
/** What the routing tables say about one webhook; `tenant` is the installation match, or the repo match when no installation was sent. */
|
|
65
|
+
export interface GithubRouting {
|
|
66
|
+
installations: number;
|
|
67
|
+
repositories: number;
|
|
68
|
+
tenant: string | null;
|
|
69
|
+
}
|
|
70
|
+
export declare function githubRouting(hippoRoot: string, args: {
|
|
71
|
+
installationId?: string | null;
|
|
72
|
+
repoFullName?: string | null;
|
|
73
|
+
}): GithubRouting;
|
|
74
|
+
export type HwmColumn = 'issues_hwm' | 'issue_comments_hwm' | 'pr_review_comments_hwm';
|
|
75
|
+
export interface StoredCursors {
|
|
76
|
+
issues: string | null;
|
|
77
|
+
issueComments: string | null;
|
|
78
|
+
prReviewComments: string | null;
|
|
79
|
+
}
|
|
80
|
+
export declare function readCursors(hippoRoot: string, tenantId: string, repo: string): StoredCursors;
|
|
81
|
+
export declare function writeHwm(hippoRoot: string, tenantId: string, repo: string, column: HwmColumn, value: string): void;
|
|
82
|
+
/** Sets all three HWMs to `since` for a first run; COALESCE keeps any HWM a stream has already saved. */
|
|
83
|
+
export declare function seedCursors(hippoRoot: string, tenantId: string, repo: string, since: string): void;
|
|
84
|
+
//# sourceMappingURL=github.d.ts.map
|
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
// The GitHub connector's tables: event log, dead-letter queue, tenant routing and backfill cursors.
|
|
2
|
+
import { withWriteScope } from '../../db/index.js';
|
|
3
|
+
import { archiveRawMemory } from '../raw-archive.js';
|
|
4
|
+
import { onHandle } from '../open.js';
|
|
5
|
+
export function eventSeenAt(db, idempotencyKey) {
|
|
6
|
+
const row = db.prepare(`SELECT 1 FROM github_event_log WHERE idempotency_key = ?`).get(idempotencyKey);
|
|
7
|
+
return !!row;
|
|
8
|
+
}
|
|
9
|
+
export function eventMemoryAt(db, idempotencyKey) {
|
|
10
|
+
// SAFETY: the SELECT projects exactly the memory_id column of github_event_log.
|
|
11
|
+
const row = db.prepare(`SELECT memory_id FROM github_event_log WHERE idempotency_key = ?`).get(idempotencyKey);
|
|
12
|
+
return row?.memory_id ?? null;
|
|
13
|
+
}
|
|
14
|
+
/** False when the key was already logged, so a caller inside a write scope can roll its own row back. */
|
|
15
|
+
export function logEventAt(db, entry) {
|
|
16
|
+
const inserted = db.prepare(`INSERT OR IGNORE INTO github_event_log (idempotency_key, delivery_id, event_name, ingested_at, memory_id) VALUES (?, ?, ?, ?, ?)`).run(entry.idempotencyKey, entry.deliveryId, entry.eventName, new Date().toISOString(), entry.memoryId);
|
|
17
|
+
return Number(inserted.changes ?? 0) !== 0;
|
|
18
|
+
}
|
|
19
|
+
/** The memory an already-seen key points at, or null when the key is new. */
|
|
20
|
+
export function seenEvent(hippoRoot, idempotencyKey) {
|
|
21
|
+
return onHandle(hippoRoot, (db) => eventSeenAt(db, idempotencyKey) ? { memoryId: eventMemoryAt(db, idempotencyKey) } : null);
|
|
22
|
+
}
|
|
23
|
+
export function logEvent(hippoRoot, entry) {
|
|
24
|
+
onHandle(hippoRoot, (db) => { logEventAt(db, entry); });
|
|
25
|
+
}
|
|
26
|
+
/** Archives every active raw row of one tenant's artifact and logs the delete event; a failed archive rolls back the batch and the log row. */
|
|
27
|
+
export function archiveDeletedArtifact(hippoRoot, del) {
|
|
28
|
+
return onHandle(hippoRoot, (db) => {
|
|
29
|
+
if (eventSeenAt(db, del.idempotencyKey))
|
|
30
|
+
return { duplicate: true, archived: 0 };
|
|
31
|
+
const logged = { idempotencyKey: del.idempotencyKey, deliveryId: del.deliveryId, eventName: del.eventName };
|
|
32
|
+
// SAFETY: the SELECT projects only the `id` column.
|
|
33
|
+
const rows = db
|
|
34
|
+
.prepare(`SELECT id FROM memories WHERE artifact_ref = ? AND tenant_id = ? AND kind = 'raw'`)
|
|
35
|
+
.all(del.artifactRef, del.tenantId);
|
|
36
|
+
const memoryIds = rows.map((r) => r.id);
|
|
37
|
+
if (memoryIds.length === 0) {
|
|
38
|
+
// Still logged, so a retry of the same delete answers 'duplicate'.
|
|
39
|
+
logEventAt(db, { ...logged, memoryId: null });
|
|
40
|
+
return { duplicate: false, archived: 0 };
|
|
41
|
+
}
|
|
42
|
+
withWriteScope(db, 'github_delete_all', () => {
|
|
43
|
+
for (const id of memoryIds)
|
|
44
|
+
archiveRawMemory(db, id, { reason: del.reason, who: del.who });
|
|
45
|
+
logEventAt(db, { ...logged, memoryId: memoryIds[0] });
|
|
46
|
+
});
|
|
47
|
+
return { duplicate: false, archived: memoryIds.length };
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
function insertDlqAt(db, row) {
|
|
51
|
+
const result = db
|
|
52
|
+
.prepare(`INSERT INTO github_dlq
|
|
53
|
+
(tenant_id, raw_payload, error, event_name, delivery_id, signature,
|
|
54
|
+
installation_id, repo_full_name, received_at, bucket)
|
|
55
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`)
|
|
56
|
+
.run(row.tenantId, row.rawPayload, row.error, row.eventName ?? null, row.deliveryId ?? null, row.signature, row.installationId ?? null, row.repoFullName ?? null, new Date().toISOString(), row.bucket);
|
|
57
|
+
return Number(result.lastInsertRowid);
|
|
58
|
+
}
|
|
59
|
+
export function insertDlq(hippoRoot, row) {
|
|
60
|
+
return onHandle(hippoRoot, (db) => insertDlqAt(db, row));
|
|
61
|
+
}
|
|
62
|
+
const SELECT_COLUMNS = `id, tenant_id, raw_payload, error, event_name, delivery_id,
|
|
63
|
+
signature, installation_id, repo_full_name, retry_count,
|
|
64
|
+
received_at, retried_at, bucket`;
|
|
65
|
+
function rowToItem(r) {
|
|
66
|
+
return {
|
|
67
|
+
id: Number(r.id),
|
|
68
|
+
tenantId: String(r.tenant_id),
|
|
69
|
+
rawPayload: String(r.raw_payload),
|
|
70
|
+
error: String(r.error),
|
|
71
|
+
eventName: r.event_name == null ? null : String(r.event_name),
|
|
72
|
+
deliveryId: r.delivery_id == null ? null : String(r.delivery_id),
|
|
73
|
+
signature: r.signature == null ? null : String(r.signature),
|
|
74
|
+
installationId: r.installation_id == null ? null : String(r.installation_id),
|
|
75
|
+
repoFullName: r.repo_full_name == null ? null : String(r.repo_full_name),
|
|
76
|
+
retryCount: Number(r.retry_count ?? 0),
|
|
77
|
+
receivedAt: String(r.received_at),
|
|
78
|
+
retriedAt: r.retried_at == null ? null : String(r.retried_at),
|
|
79
|
+
bucket: r.bucket == null ? 'parse_error' : String(r.bucket),
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
function listDlqAt(db, tenantId, limit) {
|
|
83
|
+
// SAFETY: SELECT_COLUMNS projects exactly DlqRawRow's fields.
|
|
84
|
+
const rows = db
|
|
85
|
+
.prepare(`SELECT ${SELECT_COLUMNS}
|
|
86
|
+
FROM github_dlq
|
|
87
|
+
WHERE tenant_id = ?
|
|
88
|
+
ORDER BY received_at ASC
|
|
89
|
+
LIMIT ?`)
|
|
90
|
+
.all(tenantId, limit);
|
|
91
|
+
return rows.map(rowToItem);
|
|
92
|
+
}
|
|
93
|
+
export function listDlqRows(hippoRoot, tenantId, limit) {
|
|
94
|
+
return onHandle(hippoRoot, (db) => listDlqAt(db, tenantId, limit));
|
|
95
|
+
}
|
|
96
|
+
function dlqEntryAt(db, id) {
|
|
97
|
+
// SAFETY: SELECT_COLUMNS projects exactly DlqRawRow's fields.
|
|
98
|
+
const row = db
|
|
99
|
+
.prepare(`SELECT ${SELECT_COLUMNS}
|
|
100
|
+
FROM github_dlq
|
|
101
|
+
WHERE id = ?`)
|
|
102
|
+
.get(id);
|
|
103
|
+
if (!row)
|
|
104
|
+
return null;
|
|
105
|
+
return rowToItem(row);
|
|
106
|
+
}
|
|
107
|
+
export function dlqEntry(hippoRoot, id) {
|
|
108
|
+
return onHandle(hippoRoot, (db) => dlqEntryAt(db, id));
|
|
109
|
+
}
|
|
110
|
+
export function bumpDlqRetry(hippoRoot, id) {
|
|
111
|
+
onHandle(hippoRoot, (db) => {
|
|
112
|
+
db.prepare(`UPDATE github_dlq
|
|
113
|
+
SET retry_count = retry_count + 1,
|
|
114
|
+
retried_at = ?
|
|
115
|
+
WHERE id = ?`).run(new Date().toISOString(), id);
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
export function githubRouting(hippoRoot, args) {
|
|
119
|
+
return onHandle(hippoRoot, (db) => {
|
|
120
|
+
// SAFETY: the SELECT projects exactly one column, `c`, as a COUNT(*).
|
|
121
|
+
const instCount = db
|
|
122
|
+
.prepare(`SELECT COUNT(*) AS c FROM github_installations`)
|
|
123
|
+
.get().c;
|
|
124
|
+
// SAFETY: the SELECT projects exactly one column, `c`, as a COUNT(*).
|
|
125
|
+
const repoCount = db
|
|
126
|
+
.prepare(`SELECT COUNT(*) AS c FROM github_repositories`)
|
|
127
|
+
.get().c;
|
|
128
|
+
const counts = { installations: Number(instCount), repositories: Number(repoCount) };
|
|
129
|
+
if (args.installationId) {
|
|
130
|
+
// SAFETY: the SELECT projects exactly the tenant_id column of github_installations.
|
|
131
|
+
const row = db
|
|
132
|
+
.prepare(`SELECT tenant_id FROM github_installations WHERE installation_id = ?`)
|
|
133
|
+
.get(args.installationId);
|
|
134
|
+
return { ...counts, tenant: row?.tenant_id ?? null };
|
|
135
|
+
}
|
|
136
|
+
if ((counts.installations === 0 && counts.repositories === 0) || !args.repoFullName) {
|
|
137
|
+
return { ...counts, tenant: null };
|
|
138
|
+
}
|
|
139
|
+
// SAFETY: the SELECT projects exactly the tenant_id column of github_repositories.
|
|
140
|
+
const row = db
|
|
141
|
+
.prepare(`SELECT tenant_id FROM github_repositories WHERE repo_full_name = ? ORDER BY added_at, tenant_id LIMIT 1`)
|
|
142
|
+
.get(args.repoFullName);
|
|
143
|
+
return { ...counts, tenant: row?.tenant_id ?? null };
|
|
144
|
+
});
|
|
145
|
+
}
|
|
146
|
+
export function readCursors(hippoRoot, tenantId, repo) {
|
|
147
|
+
return onHandle(hippoRoot, (db) => {
|
|
148
|
+
// SAFETY: the SELECT names exactly the three HWM columns.
|
|
149
|
+
const row = db
|
|
150
|
+
.prepare(`SELECT issues_hwm, issue_comments_hwm, pr_review_comments_hwm
|
|
151
|
+
FROM github_cursors WHERE tenant_id = ? AND repo_full_name = ?`)
|
|
152
|
+
.get(tenantId, repo);
|
|
153
|
+
return {
|
|
154
|
+
issues: row?.issues_hwm ?? null,
|
|
155
|
+
issueComments: row?.issue_comments_hwm ?? null,
|
|
156
|
+
prReviewComments: row?.pr_review_comments_hwm ?? null,
|
|
157
|
+
};
|
|
158
|
+
});
|
|
159
|
+
}
|
|
160
|
+
export function writeHwm(hippoRoot, tenantId, repo, column, value) {
|
|
161
|
+
onHandle(hippoRoot, (db) => {
|
|
162
|
+
db.prepare(`INSERT INTO github_cursors (tenant_id, repo_full_name, ${column}, updated_at)
|
|
163
|
+
VALUES (?, ?, ?, ?)
|
|
164
|
+
ON CONFLICT(tenant_id, repo_full_name)
|
|
165
|
+
DO UPDATE SET ${column} = excluded.${column}, updated_at = excluded.updated_at`).run(tenantId, repo, value, new Date().toISOString());
|
|
166
|
+
});
|
|
167
|
+
}
|
|
168
|
+
/** Sets all three HWMs to `since` for a first run; COALESCE keeps any HWM a stream has already saved. */
|
|
169
|
+
export function seedCursors(hippoRoot, tenantId, repo, since) {
|
|
170
|
+
onHandle(hippoRoot, (db) => {
|
|
171
|
+
db.prepare(`INSERT INTO github_cursors (tenant_id, repo_full_name, issues_hwm, issue_comments_hwm, pr_review_comments_hwm, updated_at)
|
|
172
|
+
VALUES (?, ?, ?, ?, ?, ?)
|
|
173
|
+
ON CONFLICT(tenant_id, repo_full_name) DO UPDATE SET
|
|
174
|
+
issues_hwm = COALESCE(github_cursors.issues_hwm, excluded.issues_hwm),
|
|
175
|
+
issue_comments_hwm = COALESCE(github_cursors.issue_comments_hwm, excluded.issue_comments_hwm),
|
|
176
|
+
pr_review_comments_hwm = COALESCE(github_cursors.pr_review_comments_hwm, excluded.pr_review_comments_hwm),
|
|
177
|
+
updated_at = excluded.updated_at`).run(tenantId, repo, since, since, since, new Date().toISOString());
|
|
178
|
+
});
|
|
179
|
+
}
|
|
180
|
+
//# sourceMappingURL=github.js.map
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import type { DatabaseSyncLike } from '../../db/index.js';
|
|
2
|
+
export declare function slackCursorAt(db: DatabaseSyncLike, tenantId: string, channelId: string): string | null;
|
|
3
|
+
export declare function saveSlackCursorAt(db: DatabaseSyncLike, tenantId: string, channelId: string, latestTs: string): void;
|
|
4
|
+
export declare function slackCursor(hippoRoot: string, tenantId: string, channelId: string): string | null;
|
|
5
|
+
export declare function saveSlackCursor(hippoRoot: string, tenantId: string, channelId: string, latestTs: string): void;
|
|
6
|
+
export declare function slackEventSeenAt(db: DatabaseSyncLike, eventId: string): boolean;
|
|
7
|
+
/** Records the event unless a row already holds its id; false means another writer got there first. */
|
|
8
|
+
export declare function markSlackEventSeenAt(db: DatabaseSyncLike, eventId: string, memoryId: string | null): boolean;
|
|
9
|
+
export declare function slackEventMemoryAt(db: DatabaseSyncLike, eventId: string): string | null;
|
|
10
|
+
/** What the event log holds for one event id; `memoryId` is null for an event seen without a memory. */
|
|
11
|
+
export type SlackEventRecord = {
|
|
12
|
+
seen: false;
|
|
13
|
+
} | {
|
|
14
|
+
seen: true;
|
|
15
|
+
memoryId: string | null;
|
|
16
|
+
};
|
|
17
|
+
export declare function slackEventRecord(hippoRoot: string, eventId: string): SlackEventRecord;
|
|
18
|
+
export declare function markSlackEventSeen(hippoRoot: string, eventId: string, memoryId: string | null): void;
|
|
19
|
+
/** The raw memory a Slack message became. The tenant filter keeps one tenant's deletion from reaching another's row with the same ref. */
|
|
20
|
+
export declare function rawMemoryIdForArtifactAt(db: DatabaseSyncLike, artifactRef: string, tenantId: string): string | null;
|
|
21
|
+
export type DlqBucket = 'parse_error' | 'unroutable' | 'signature_fail';
|
|
22
|
+
export interface DlqItem {
|
|
23
|
+
id: number;
|
|
24
|
+
tenantId: string;
|
|
25
|
+
teamId: string | null;
|
|
26
|
+
rawPayload: string;
|
|
27
|
+
error: string;
|
|
28
|
+
receivedAt: string;
|
|
29
|
+
retriedAt: string | null;
|
|
30
|
+
bucket: DlqBucket | string;
|
|
31
|
+
retryCount: number;
|
|
32
|
+
signature: string | null;
|
|
33
|
+
slackTimestamp: string | null;
|
|
34
|
+
}
|
|
35
|
+
/** One row to park; the two Slack-only columns are stored NULL when left out. */
|
|
36
|
+
export interface SlackDlqInsert {
|
|
37
|
+
tenantId: string;
|
|
38
|
+
teamId?: string | null;
|
|
39
|
+
rawPayload: string;
|
|
40
|
+
error: string;
|
|
41
|
+
bucket: DlqBucket;
|
|
42
|
+
signature: string | null;
|
|
43
|
+
slackTimestamp?: string | null;
|
|
44
|
+
}
|
|
45
|
+
/** Counts a failed replay and leaves `retried_at` alone, so the row still reads as never drained. */
|
|
46
|
+
export declare function bumpSlackDlqRetryCountAt(db: DatabaseSyncLike, id: number): void;
|
|
47
|
+
export declare function insertSlackDlq(hippoRoot: string, row: SlackDlqInsert): number;
|
|
48
|
+
export declare function listSlackDlq(hippoRoot: string, tenantId: string, limit: number): DlqItem[];
|
|
49
|
+
export declare function slackDlqEntry(hippoRoot: string, id: number): DlqItem | null;
|
|
50
|
+
export declare function markSlackDlqRetried(hippoRoot: string, id: number): void;
|
|
51
|
+
export declare function bumpSlackDlqRetryCount(hippoRoot: string, id: number): void;
|
|
52
|
+
/** The tenant a team maps to, or how many workspaces are registered when it maps to none. */
|
|
53
|
+
export type SlackTeamRoute = {
|
|
54
|
+
tenantId: string;
|
|
55
|
+
} | {
|
|
56
|
+
tenantId: null;
|
|
57
|
+
workspaceCount: number;
|
|
58
|
+
};
|
|
59
|
+
export declare function slackTeamRouteAt(db: DatabaseSyncLike, teamId: string): SlackTeamRoute;
|
|
60
|
+
export declare function slackTeamRoute(hippoRoot: string, teamId: string): SlackTeamRoute;
|
|
61
|
+
export interface SlackWorkspace {
|
|
62
|
+
teamId: string;
|
|
63
|
+
tenantId: string;
|
|
64
|
+
addedAt: string;
|
|
65
|
+
}
|
|
66
|
+
export declare function upsertSlackWorkspace(hippoRoot: string, teamId: string, tenantId: string): SlackWorkspace;
|
|
67
|
+
export declare function listSlackWorkspaces(hippoRoot: string): SlackWorkspace[];
|
|
68
|
+
export declare function removeSlackWorkspace(hippoRoot: string, teamId: string): boolean;
|
|
69
|
+
//# sourceMappingURL=slack.d.ts.map
|
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
// Every statement the Slack connector runs on hippo.db: backfill cursors, the event log, the dead-letter queue and workspace routing.
|
|
2
|
+
// `xAt(db, ...)` runs on the caller's handle; the same name without `At` opens hippo.db for that one call.
|
|
3
|
+
import { onHandle } from '../open.js';
|
|
4
|
+
// Backfill cursors
|
|
5
|
+
export function slackCursorAt(db, tenantId, channelId) {
|
|
6
|
+
// SAFETY: the SELECT names the single `latest_ts` column; sqlite returns undefined when no row matches.
|
|
7
|
+
const row = db
|
|
8
|
+
.prepare(`SELECT latest_ts FROM slack_cursors WHERE tenant_id=? AND channel_id=?`)
|
|
9
|
+
.get(tenantId, channelId);
|
|
10
|
+
return row?.latest_ts ?? null;
|
|
11
|
+
}
|
|
12
|
+
export function saveSlackCursorAt(db, tenantId, channelId, latestTs) {
|
|
13
|
+
db.prepare(`INSERT INTO slack_cursors (tenant_id, channel_id, latest_ts, updated_at) VALUES (?,?,?,?)
|
|
14
|
+
ON CONFLICT(tenant_id, channel_id) DO UPDATE SET latest_ts = excluded.latest_ts, updated_at = excluded.updated_at`).run(tenantId, channelId, latestTs, new Date().toISOString());
|
|
15
|
+
}
|
|
16
|
+
export function slackCursor(hippoRoot, tenantId, channelId) {
|
|
17
|
+
return onHandle(hippoRoot, (db) => slackCursorAt(db, tenantId, channelId));
|
|
18
|
+
}
|
|
19
|
+
export function saveSlackCursor(hippoRoot, tenantId, channelId, latestTs) {
|
|
20
|
+
onHandle(hippoRoot, (db) => saveSlackCursorAt(db, tenantId, channelId, latestTs));
|
|
21
|
+
}
|
|
22
|
+
// Event log
|
|
23
|
+
export function slackEventSeenAt(db, eventId) {
|
|
24
|
+
const row = db.prepare(`SELECT 1 FROM slack_event_log WHERE event_id = ?`).get(eventId);
|
|
25
|
+
return !!row;
|
|
26
|
+
}
|
|
27
|
+
/** Records the event unless a row already holds its id; false means another writer got there first. */
|
|
28
|
+
export function markSlackEventSeenAt(db, eventId, memoryId) {
|
|
29
|
+
const inserted = db
|
|
30
|
+
.prepare(`INSERT OR IGNORE INTO slack_event_log (event_id, ingested_at, memory_id) VALUES (?, ?, ?)`)
|
|
31
|
+
.run(eventId, new Date().toISOString(), memoryId);
|
|
32
|
+
return Number(inserted.changes ?? 0) !== 0;
|
|
33
|
+
}
|
|
34
|
+
export function slackEventMemoryAt(db, eventId) {
|
|
35
|
+
// SAFETY: the SELECT names only `memory_id`, a nullable column; .get() returns undefined when no row matches.
|
|
36
|
+
const row = db.prepare(`SELECT memory_id FROM slack_event_log WHERE event_id = ?`).get(eventId);
|
|
37
|
+
return row?.memory_id ?? null;
|
|
38
|
+
}
|
|
39
|
+
export function slackEventRecord(hippoRoot, eventId) {
|
|
40
|
+
return onHandle(hippoRoot, (db) => slackEventSeenAt(db, eventId) ? { seen: true, memoryId: slackEventMemoryAt(db, eventId) } : { seen: false });
|
|
41
|
+
}
|
|
42
|
+
export function markSlackEventSeen(hippoRoot, eventId, memoryId) {
|
|
43
|
+
onHandle(hippoRoot, (db) => markSlackEventSeenAt(db, eventId, memoryId));
|
|
44
|
+
}
|
|
45
|
+
// Deletion lookup
|
|
46
|
+
/** The raw memory a Slack message became. The tenant filter keeps one tenant's deletion from reaching another's row with the same ref. */
|
|
47
|
+
export function rawMemoryIdForArtifactAt(db, artifactRef, tenantId) {
|
|
48
|
+
// SAFETY: the SELECT projects only `id`; .get() returns undefined when no row matches.
|
|
49
|
+
const row = db
|
|
50
|
+
.prepare(`SELECT id FROM memories WHERE artifact_ref = ? AND tenant_id = ? AND kind = 'raw'`)
|
|
51
|
+
.get(artifactRef, tenantId);
|
|
52
|
+
return row?.id ?? null;
|
|
53
|
+
}
|
|
54
|
+
function rowToItem(r) {
|
|
55
|
+
return {
|
|
56
|
+
id: Number(r.id),
|
|
57
|
+
tenantId: String(r.tenant_id),
|
|
58
|
+
teamId: r.team_id == null ? null : String(r.team_id),
|
|
59
|
+
rawPayload: String(r.raw_payload),
|
|
60
|
+
error: String(r.error),
|
|
61
|
+
receivedAt: String(r.received_at),
|
|
62
|
+
retriedAt: r.retried_at == null ? null : String(r.retried_at),
|
|
63
|
+
bucket: r.bucket == null ? 'parse_error' : String(r.bucket),
|
|
64
|
+
retryCount: Number(r.retry_count ?? 0),
|
|
65
|
+
signature: r.signature == null ? null : String(r.signature),
|
|
66
|
+
slackTimestamp: r.slack_timestamp == null ? null : String(r.slack_timestamp),
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
function insertSlackDlqAt(db, row) {
|
|
70
|
+
const result = db
|
|
71
|
+
.prepare(`INSERT INTO slack_dlq
|
|
72
|
+
(tenant_id, team_id, raw_payload, error, received_at, bucket, signature, slack_timestamp)
|
|
73
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?)`)
|
|
74
|
+
.run(row.tenantId, row.teamId ?? null, row.rawPayload, row.error, new Date().toISOString(), row.bucket, row.signature, row.slackTimestamp ?? null);
|
|
75
|
+
return Number(result.lastInsertRowid);
|
|
76
|
+
}
|
|
77
|
+
function listSlackDlqAt(db, tenantId, limit) {
|
|
78
|
+
// SAFETY: row shape matches the columns named in the SELECT below.
|
|
79
|
+
const rows = db
|
|
80
|
+
.prepare(`SELECT id, tenant_id, team_id, raw_payload, error, received_at, retried_at,
|
|
81
|
+
bucket, retry_count, signature, slack_timestamp
|
|
82
|
+
FROM slack_dlq
|
|
83
|
+
WHERE tenant_id = ?
|
|
84
|
+
ORDER BY received_at ASC
|
|
85
|
+
LIMIT ?`)
|
|
86
|
+
.all(tenantId, limit);
|
|
87
|
+
return rows.map(rowToItem);
|
|
88
|
+
}
|
|
89
|
+
function slackDlqEntryAt(db, id) {
|
|
90
|
+
// SAFETY: row shape matches the columns named in the SELECT below.
|
|
91
|
+
const row = db
|
|
92
|
+
.prepare(`SELECT id, tenant_id, team_id, raw_payload, error, received_at, retried_at,
|
|
93
|
+
bucket, retry_count, signature, slack_timestamp
|
|
94
|
+
FROM slack_dlq
|
|
95
|
+
WHERE id = ?`)
|
|
96
|
+
.get(id);
|
|
97
|
+
if (!row)
|
|
98
|
+
return null;
|
|
99
|
+
return rowToItem(row);
|
|
100
|
+
}
|
|
101
|
+
function markSlackDlqRetriedAt(db, id) {
|
|
102
|
+
db.prepare(`UPDATE slack_dlq SET retried_at = ?, retry_count = retry_count + 1 WHERE id = ?`)
|
|
103
|
+
.run(new Date().toISOString(), id);
|
|
104
|
+
}
|
|
105
|
+
/** Counts a failed replay and leaves `retried_at` alone, so the row still reads as never drained. */
|
|
106
|
+
export function bumpSlackDlqRetryCountAt(db, id) {
|
|
107
|
+
db.prepare(`UPDATE slack_dlq SET retry_count = retry_count + 1 WHERE id = ?`).run(id);
|
|
108
|
+
}
|
|
109
|
+
export function insertSlackDlq(hippoRoot, row) {
|
|
110
|
+
return onHandle(hippoRoot, (db) => insertSlackDlqAt(db, row));
|
|
111
|
+
}
|
|
112
|
+
export function listSlackDlq(hippoRoot, tenantId, limit) {
|
|
113
|
+
return onHandle(hippoRoot, (db) => listSlackDlqAt(db, tenantId, limit));
|
|
114
|
+
}
|
|
115
|
+
export function slackDlqEntry(hippoRoot, id) {
|
|
116
|
+
return onHandle(hippoRoot, (db) => slackDlqEntryAt(db, id));
|
|
117
|
+
}
|
|
118
|
+
export function markSlackDlqRetried(hippoRoot, id) {
|
|
119
|
+
onHandle(hippoRoot, (db) => markSlackDlqRetriedAt(db, id));
|
|
120
|
+
}
|
|
121
|
+
export function bumpSlackDlqRetryCount(hippoRoot, id) {
|
|
122
|
+
onHandle(hippoRoot, (db) => bumpSlackDlqRetryCountAt(db, id));
|
|
123
|
+
}
|
|
124
|
+
export function slackTeamRouteAt(db, teamId) {
|
|
125
|
+
// SAFETY: the SELECT names only `tenant_id`; .get() returns undefined when no row matches.
|
|
126
|
+
const row = db
|
|
127
|
+
.prepare(`SELECT tenant_id FROM slack_workspaces WHERE team_id = ?`)
|
|
128
|
+
.get(teamId);
|
|
129
|
+
if (row?.tenant_id)
|
|
130
|
+
return { tenantId: row.tenant_id };
|
|
131
|
+
// SAFETY: `COUNT(*) AS c` always returns one row shaped { c }, as a number or a bigint.
|
|
132
|
+
const total = db
|
|
133
|
+
.prepare(`SELECT COUNT(*) AS c FROM slack_workspaces`)
|
|
134
|
+
.get().c;
|
|
135
|
+
return { tenantId: null, workspaceCount: Number(total) };
|
|
136
|
+
}
|
|
137
|
+
export function slackTeamRoute(hippoRoot, teamId) {
|
|
138
|
+
return onHandle(hippoRoot, (db) => slackTeamRouteAt(db, teamId));
|
|
139
|
+
}
|
|
140
|
+
/** Upserts on team_id: operators move a workspace between tenants without a delete first. */
|
|
141
|
+
function upsertSlackWorkspaceAt(db, teamId, tenantId) {
|
|
142
|
+
const addedAt = new Date().toISOString();
|
|
143
|
+
db.prepare(`INSERT INTO slack_workspaces (team_id, tenant_id, added_at)
|
|
144
|
+
VALUES (?, ?, ?)
|
|
145
|
+
ON CONFLICT(team_id) DO UPDATE SET
|
|
146
|
+
tenant_id = excluded.tenant_id,
|
|
147
|
+
added_at = excluded.added_at`).run(teamId, tenantId, addedAt);
|
|
148
|
+
return { teamId, tenantId, addedAt };
|
|
149
|
+
}
|
|
150
|
+
function listSlackWorkspacesAt(db) {
|
|
151
|
+
// SAFETY: the SELECT names team_id, tenant_id and added_at, all NOT NULL text columns of slack_workspaces.
|
|
152
|
+
const rows = db
|
|
153
|
+
.prepare(`SELECT team_id, tenant_id, added_at FROM slack_workspaces ORDER BY team_id`)
|
|
154
|
+
.all();
|
|
155
|
+
return rows.map((r) => ({
|
|
156
|
+
teamId: r.team_id,
|
|
157
|
+
tenantId: r.tenant_id,
|
|
158
|
+
addedAt: r.added_at,
|
|
159
|
+
}));
|
|
160
|
+
}
|
|
161
|
+
/** True when a row was deleted, so the caller can report not-found without a second lookup. */
|
|
162
|
+
function removeSlackWorkspaceAt(db, teamId) {
|
|
163
|
+
const result = db
|
|
164
|
+
.prepare(`DELETE FROM slack_workspaces WHERE team_id = ?`)
|
|
165
|
+
.run(teamId);
|
|
166
|
+
return Number(result.changes) > 0;
|
|
167
|
+
}
|
|
168
|
+
export function upsertSlackWorkspace(hippoRoot, teamId, tenantId) {
|
|
169
|
+
return onHandle(hippoRoot, (db) => upsertSlackWorkspaceAt(db, teamId, tenantId));
|
|
170
|
+
}
|
|
171
|
+
export function listSlackWorkspaces(hippoRoot) {
|
|
172
|
+
return onHandle(hippoRoot, listSlackWorkspacesAt);
|
|
173
|
+
}
|
|
174
|
+
export function removeSlackWorkspace(hippoRoot, teamId) {
|
|
175
|
+
return onHandle(hippoRoot, (db) => removeSlackWorkspaceAt(db, teamId));
|
|
176
|
+
}
|
|
177
|
+
//# sourceMappingURL=slack.js.map
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { ConfidenceInputs, MemoryEntry, StrengthInputs } from '../core/memory.js';
|
|
2
|
+
export type DashboardRow = StrengthInputs & ConfidenceInputs & Pick<MemoryEntry, 'id' | 'content' | 'tags' | 'layer' | 'scope' | 'origin_project' | 'kind' | 'superseded_by'>;
|
|
3
|
+
export interface ExcludedCounts {
|
|
4
|
+
superseded: number;
|
|
5
|
+
archived: number;
|
|
6
|
+
quarantined: number;
|
|
7
|
+
}
|
|
8
|
+
export interface DashboardRows {
|
|
9
|
+
/** Rows `isLiveMemory` admits, by created then id as `loadAllEntries` orders them. */
|
|
10
|
+
readonly live: DashboardRow[];
|
|
11
|
+
/** Every other row of the tenant, counted under the first of quarantined, superseded and archived that fits it. */
|
|
12
|
+
readonly excluded: ExcludedCounts;
|
|
13
|
+
}
|
|
14
|
+
/** One tenant's live rows and the counts of the rest, read in one transaction so the two agree. */
|
|
15
|
+
export declare function loadDashboardRows(hippoRoot: string, tenantId: string): DashboardRows;
|
|
16
|
+
/** The dashboard's one read-only connection, kept across refreshes for the commit signal; it opens on the first read that finds a database. */
|
|
17
|
+
export declare class DashboardConnection {
|
|
18
|
+
private readonly hippoRoot;
|
|
19
|
+
private db;
|
|
20
|
+
constructor(hippoRoot: string);
|
|
21
|
+
/** `PRAGMA data_version`, which moves when another connection commits; null while the store has no hippo.db. */
|
|
22
|
+
dataVersion(): number | null;
|
|
23
|
+
/** Ids with a stored vector: none before the connection opens, null on a store older than the vector table (schema v52). */
|
|
24
|
+
embeddedIds(): ReadonlySet<string> | null;
|
|
25
|
+
close(): void;
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=dashboard-reads.d.ts.map
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
// The dashboard snapshot's read of one tenant: live rows with only the columns it shows, and SQL counts of the rows it leaves out.
|
|
2
|
+
import * as fs from 'fs';
|
|
3
|
+
import { closeHippoDb, getHippoDbPath, openHippoDbReadOnly } from '../db/index.js';
|
|
4
|
+
import { withReadSnapshot } from '../db/busy.js';
|
|
5
|
+
import { pragmaDataVersion } from '../db/meta.js';
|
|
6
|
+
import { tableExists } from '../db/tables.js';
|
|
7
|
+
import { storedVectorIds } from '../db/vector-store.js';
|
|
8
|
+
import { openStore } from './open.js';
|
|
9
|
+
import { QUARANTINE_SCOPE_PREFIX } from './quarantine.js';
|
|
10
|
+
import { parseJsonArray } from './rows.js';
|
|
11
|
+
const LIVE_COLUMNS = 'id, created, last_retrieved, retrieval_count, half_life_days, layer, tags_json, emotional_valence, outcome_positive, outcome_negative, pinned, confidence, content, superseded_by, kind, scope, origin_project';
|
|
12
|
+
// SQL twins of isQuarantineScope and of the two halves of isLiveMemory; substr compares bytes, as startsWith does, where LIKE would fold case.
|
|
13
|
+
const QUARANTINED = `(scope IS NOT NULL AND substr(scope, 1, ${QUARANTINE_SCOPE_PREFIX.length}) = '${QUARANTINE_SCOPE_PREFIX}')`;
|
|
14
|
+
const SUPERSEDED_BY = `(superseded_by IS NOT NULL AND superseded_by <> '')`;
|
|
15
|
+
const KIND = `COALESCE(kind, 'distilled')`;
|
|
16
|
+
const LIVE = `NOT ${SUPERSEDED_BY} AND ${KIND} IN ('raw', 'distilled') AND NOT ${QUARANTINED}`;
|
|
17
|
+
// The defaults are rowToEntry's, so a row reads the same here as through the full mapper.
|
|
18
|
+
function toDashboardRow(row) {
|
|
19
|
+
// SAFETY: layer and kind are columns the write path only fills from those two unions.
|
|
20
|
+
return {
|
|
21
|
+
id: row.id,
|
|
22
|
+
created: row.created,
|
|
23
|
+
last_retrieved: row.last_retrieved,
|
|
24
|
+
retrieval_count: Number(row.retrieval_count ?? 0),
|
|
25
|
+
half_life_days: Number(row.half_life_days ?? 7),
|
|
26
|
+
layer: row.layer,
|
|
27
|
+
tags: parseJsonArray(row.tags_json),
|
|
28
|
+
emotional_valence: row.emotional_valence ?? 'neutral',
|
|
29
|
+
outcome_positive: Number(row.outcome_positive ?? 0),
|
|
30
|
+
outcome_negative: Number(row.outcome_negative ?? 0),
|
|
31
|
+
pinned: Boolean(row.pinned),
|
|
32
|
+
confidence: row.confidence ?? 'observed',
|
|
33
|
+
content: row.content,
|
|
34
|
+
superseded_by: row.superseded_by ?? null,
|
|
35
|
+
kind: (row.kind ?? 'distilled'),
|
|
36
|
+
scope: row.scope ?? null,
|
|
37
|
+
origin_project: row.origin_project ?? null,
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
/** One tenant's live rows and the counts of the rest, read in one transaction so the two agree. */
|
|
41
|
+
export function loadDashboardRows(hippoRoot, tenantId) {
|
|
42
|
+
const db = openStore(hippoRoot);
|
|
43
|
+
try {
|
|
44
|
+
return withReadSnapshot(db, () => {
|
|
45
|
+
// SAFETY: the SELECT names exactly LiveRow's columns.
|
|
46
|
+
const live = db.prepare(`SELECT ${LIVE_COLUMNS} FROM memories WHERE tenant_id = ? AND ${LIVE} ORDER BY created ASC, id ASC`).all(tenantId);
|
|
47
|
+
// SAFETY: the SELECT names exactly these two fields, and `why` is one of the three CASE arms or NULL.
|
|
48
|
+
const counts = db.prepare(`
|
|
49
|
+
SELECT CASE WHEN ${QUARANTINED} THEN 'quarantined' WHEN ${SUPERSEDED_BY} OR ${KIND} = 'superseded' THEN 'superseded' WHEN ${KIND} = 'archived' THEN 'archived' END AS why,
|
|
50
|
+
COUNT(*) AS n
|
|
51
|
+
FROM memories WHERE tenant_id = ? AND NOT (${LIVE}) GROUP BY why
|
|
52
|
+
`).all(tenantId);
|
|
53
|
+
const excluded = { superseded: 0, archived: 0, quarantined: 0 };
|
|
54
|
+
for (const { why, n } of counts)
|
|
55
|
+
if (why !== null)
|
|
56
|
+
excluded[why] = Number(n);
|
|
57
|
+
return { live: live.map(toDashboardRow), excluded };
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
finally {
|
|
61
|
+
closeHippoDb(db);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
/** The dashboard's one read-only connection, kept across refreshes for the commit signal; it opens on the first read that finds a database. */
|
|
65
|
+
export class DashboardConnection {
|
|
66
|
+
hippoRoot;
|
|
67
|
+
db = null;
|
|
68
|
+
constructor(hippoRoot) {
|
|
69
|
+
this.hippoRoot = hippoRoot;
|
|
70
|
+
}
|
|
71
|
+
/** `PRAGMA data_version`, which moves when another connection commits; null while the store has no hippo.db. */
|
|
72
|
+
dataVersion() {
|
|
73
|
+
if (this.db === null) {
|
|
74
|
+
if (!fs.existsSync(getHippoDbPath(this.hippoRoot)))
|
|
75
|
+
return null;
|
|
76
|
+
this.db = openHippoDbReadOnly(this.hippoRoot);
|
|
77
|
+
}
|
|
78
|
+
return pragmaDataVersion(this.db);
|
|
79
|
+
}
|
|
80
|
+
/** Ids with a stored vector: none before the connection opens, null on a store older than the vector table (schema v52). */
|
|
81
|
+
embeddedIds() {
|
|
82
|
+
if (this.db === null)
|
|
83
|
+
return new Set();
|
|
84
|
+
return tableExists(this.db, 'memory_vectors') ? storedVectorIds(this.db) : null;
|
|
85
|
+
}
|
|
86
|
+
close() {
|
|
87
|
+
if (this.db !== null)
|
|
88
|
+
closeHippoDb(this.db);
|
|
89
|
+
this.db = null;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
//# sourceMappingURL=dashboard-reads.js.map
|