hippo-memory 1.68.0 → 1.70.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +6 -3
- package/dist/agent-memories/apply.d.ts +3 -3
- package/dist/agent-memories/apply.js +16 -31
- package/dist/agent-memories/claude-code.d.ts +1 -3
- package/dist/agent-memories/claude-code.js +11 -7
- package/dist/agent-memories/copilot.d.ts +3 -1
- package/dist/agent-memories/copilot.js +5 -4
- package/dist/agent-memories/files.js +3 -2
- package/dist/agent-memories/gemini.js +6 -5
- package/dist/agent-memories/keys.js +3 -2
- package/dist/agent-memories/legacy.d.ts +2 -2
- package/dist/agent-memories/legacy.js +2 -2
- package/dist/agent-memories/report.d.ts +1 -1
- package/dist/agent-memories/report.js +1 -1
- package/dist/agent-memories/source.d.ts +1 -1
- package/dist/agent-memories/source.js +6 -5
- package/dist/agent-memories/sync.d.ts +1 -1
- package/dist/agent-memories/sync.js +24 -33
- package/dist/agent-memories/types.d.ts +1 -1
- package/dist/api/assemble.d.ts +2 -2
- package/dist/api/assemble.js +42 -32
- package/dist/api/audit.d.ts +4 -7
- package/dist/api/audit.js +6 -20
- package/dist/api/auth.d.ts +5 -18
- package/dist/api/auth.js +44 -194
- package/dist/api/auto-sleep.d.ts +13 -0
- package/dist/api/auto-sleep.js +32 -0
- package/dist/{availability.d.ts → api/availability.d.ts} +2 -2
- package/dist/{availability.js → api/availability.js} +12 -29
- package/dist/{context-auto.js → api/context-auto.js} +2 -1
- package/dist/{context-render.d.ts → api/context-render.d.ts} +4 -4
- package/dist/{context-render.js → api/context-render.js} +7 -6
- package/dist/api/context-select.d.ts +14 -4
- package/dist/api/context-select.js +50 -60
- package/dist/api/context-types.d.ts +5 -5
- package/dist/api/context.d.ts +2 -4
- package/dist/api/context.js +113 -85
- package/dist/api/dormant.d.ts +3 -3
- package/dist/api/dormant.js +38 -107
- package/dist/api/drill-down.d.ts +2 -2
- package/dist/api/drill-down.js +37 -65
- package/dist/api/forget.d.ts +4 -13
- package/dist/api/forget.js +13 -35
- package/dist/api/goals.d.ts +1 -1
- package/dist/api/goals.js +2 -2
- package/dist/api/index.d.ts +26 -0
- package/dist/api/index.js +29 -0
- package/dist/api/instruction-detect.js +74 -0
- package/dist/api/learn.js +63 -55
- package/dist/api/ledger-db.d.ts +20 -0
- package/dist/api/ledger-db.js +79 -0
- package/dist/api/on-store.d.ts +16 -0
- package/dist/api/on-store.js +36 -0
- package/dist/api/outcome.d.ts +9 -46
- package/dist/api/outcome.js +15 -57
- package/dist/{pilot-arm.d.ts → api/pilot-arm.d.ts} +1 -1
- package/dist/{pilot-arm.js → api/pilot-arm.js} +15 -23
- package/dist/api/promote.d.ts +7 -18
- package/dist/api/promote.js +30 -152
- package/dist/{prompt-hook.d.ts → api/prompt-hook.d.ts} +7 -7
- package/dist/{prompt-hook.js → api/prompt-hook.js} +34 -53
- package/dist/api/quarantine.d.ts +5 -5
- package/dist/api/quarantine.js +30 -106
- package/dist/api/recall-core.d.ts +4 -0
- package/dist/api/recall-core.js +112 -0
- package/dist/{recall-history.js → api/recall-history.js} +30 -25
- package/dist/{recall-pipeline.d.ts → api/recall-pipeline.d.ts} +5 -5
- package/dist/{recall-pipeline.js → api/recall-pipeline.js} +47 -42
- package/dist/api/recall-record.d.ts +10 -13
- package/dist/api/recall-record.js +10 -30
- package/dist/api/recall-request.d.ts +2 -2
- package/dist/api/recall-request.js +3 -3
- package/dist/api/recall-types.d.ts +41 -16
- package/dist/api/recall.d.ts +1 -1
- package/dist/api/recall.js +39 -37
- package/dist/api/remember.d.ts +12 -13
- package/dist/api/remember.js +38 -27
- package/dist/api/session-owners.d.ts +4 -0
- package/dist/api/session-owners.js +17 -0
- package/dist/api/sleep-run.d.ts +7 -7
- package/dist/api/sleep-run.js +63 -75
- package/dist/api/sleep.d.ts +1 -1
- package/dist/api/tokens.d.ts +2 -2
- package/dist/api/tokens.js +9 -21
- package/dist/api/types.d.ts +2 -2
- package/dist/api/types.js +1 -1
- package/dist/capture/caller-session.d.ts +2 -2
- package/dist/capture/caller-session.js +8 -8
- package/dist/{capture-error.d.ts → capture/capture-error.d.ts} +2 -2
- package/dist/{capture-error.js → capture/capture-error.js} +7 -7
- package/dist/{codex-patch.js → capture/codex-patch.js} +1 -1
- package/dist/capture/command.d.ts +1 -1
- package/dist/capture/command.js +54 -41
- package/dist/capture/compact-resume-caller.d.ts +1 -1
- package/dist/capture/compact-resume-caller.js +7 -7
- package/dist/capture/compact.d.ts +4 -1
- package/dist/capture/compact.js +59 -22
- package/dist/capture/compaction-items-caller.d.ts +1 -1
- package/dist/capture/compaction-items-caller.js +7 -5
- package/dist/{compaction-items.js → capture/compaction-items.js} +27 -3
- package/dist/{compaction-record.d.ts → capture/compaction-record.d.ts} +10 -6
- package/dist/{compaction-record.js → capture/compaction-record.js} +48 -94
- package/dist/{compaction-spool.js → capture/compaction-spool.js} +17 -13
- package/dist/capture/copilot-transcript.d.ts +3 -0
- package/dist/capture/copilot-transcript.js +9 -2
- package/dist/capture/extract.js +2 -2
- package/dist/capture/failure-caller.d.ts +2 -2
- package/dist/capture/failure-caller.js +6 -6
- package/dist/capture/failure-reading.d.ts +2 -5
- package/dist/capture/failure-reading.js +11 -12
- package/dist/{handoff-evidence.d.ts → capture/handoff-evidence.d.ts} +1 -1
- package/dist/{handoff-evidence.js → capture/handoff-evidence.js} +2 -1
- package/dist/capture/pre-compact-caller.d.ts +1 -1
- package/dist/capture/pre-compact-caller.js +2 -2
- package/dist/{session-digest.d.ts → capture/session-digest.d.ts} +1 -5
- package/dist/{session-digest.js → capture/session-digest.js} +17 -23
- package/dist/capture/session-end-caller.d.ts +2 -2
- package/dist/capture/session-end-caller.js +1 -1
- package/dist/capture/session-texts.d.ts +1 -1
- package/dist/capture/session-texts.js +5 -5
- package/dist/capture/session-worker.d.ts +13 -0
- package/dist/capture/session-worker.js +196 -0
- package/dist/{share-scrub.js → capture/share-scrub.js} +2 -2
- package/dist/capture/transcript.js +68 -74
- package/dist/capture/working-state.d.ts +0 -3
- package/dist/capture/working-state.js +7 -7
- package/dist/{audit-prune.d.ts → cli/audit-prune.d.ts} +1 -2
- package/dist/{audit-prune.js → cli/audit-prune.js} +5 -39
- package/dist/cli/audit.d.ts +2 -2
- package/dist/cli/audit.js +77 -72
- package/dist/cli/auth.d.ts +2 -1
- package/dist/cli/auth.js +18 -20
- package/dist/cli/briefs.d.ts +4 -3
- package/dist/cli/briefs.js +59 -181
- package/dist/cli/card.d.ts +2 -1
- package/dist/cli/card.js +25 -23
- package/dist/{client.d.ts → cli/client.d.ts} +1 -1
- package/dist/{client.js → cli/client.js} +1 -1
- package/dist/cli/compact-resume-payload.d.ts +8 -0
- package/dist/cli/compact-resume-payload.js +39 -0
- package/dist/cli/context.d.ts +2 -13
- package/dist/cli/context.js +41 -71
- package/dist/cli/continuity.d.ts +6 -5
- package/dist/cli/continuity.js +109 -99
- package/dist/{correction-latency.d.ts → cli/correction-latency.d.ts} +1 -1
- package/dist/cli/curate.d.ts +9 -9
- package/dist/cli/curate.js +177 -149
- package/dist/cli/dag.d.ts +4 -4
- package/dist/cli/dag.js +46 -34
- package/dist/cli/decisions.d.ts +4 -3
- package/dist/cli/decisions.js +108 -218
- package/dist/cli/eval.d.ts +1 -3
- package/dist/cli/eval.js +43 -31
- package/dist/cli/explain.d.ts +1 -1
- package/dist/cli/explain.js +35 -19
- package/dist/cli/flag-values.d.ts +25 -0
- package/dist/cli/flag-values.js +103 -0
- package/dist/cli/flags.d.ts +303 -0
- package/dist/cli/flags.js +169 -0
- package/dist/cli/goals.d.ts +2 -1
- package/dist/cli/goals.js +39 -34
- package/dist/cli/hook-runtime.d.ts +49 -0
- package/dist/cli/hook-runtime.js +155 -0
- package/dist/cli/init.d.ts +2 -1
- package/dist/cli/init.js +151 -118
- package/dist/cli/install-steps.d.ts +7 -0
- package/dist/cli/install-steps.js +110 -0
- package/dist/cli/last-sleep.d.ts +2 -1
- package/dist/cli/last-sleep.js +9 -7
- package/dist/cli/maintenance.d.ts +5 -4
- package/dist/cli/maintenance.js +31 -27
- package/dist/cli/object-verbs.d.ts +40 -0
- package/dist/cli/object-verbs.js +65 -0
- package/dist/{owner-validation.d.ts → cli/owner-validation.d.ts} +0 -1
- package/dist/{owner-validation.js → cli/owner-validation.js} +2 -2
- package/dist/cli/playbooks.d.ts +4 -3
- package/dist/cli/playbooks.js +77 -280
- package/dist/cli/print.d.ts +18 -0
- package/dist/cli/print.js +85 -0
- package/dist/cli/projects.d.ts +2 -3
- package/dist/cli/projects.js +56 -49
- package/dist/{provenance-coverage.d.ts → cli/provenance-coverage.d.ts} +1 -1
- package/dist/cli/quality-repair-once.js +4 -4
- package/dist/{quality-repair.js → cli/quality-repair.js} +23 -37
- package/dist/cli/recall.d.ts +2 -4
- package/dist/cli/recall.js +101 -150
- package/dist/{refine-llm.d.ts → cli/refine-llm.d.ts} +1 -1
- package/dist/{refine-llm.js → cli/refine-llm.js} +70 -82
- package/dist/cli/remember.d.ts +1 -3
- package/dist/cli/remember.js +124 -103
- package/dist/{scheduler.d.ts → cli/scheduler.d.ts} +3 -1
- package/dist/{scheduler.js → cli/scheduler.js} +13 -7
- package/dist/cli/serve.d.ts +1 -1
- package/dist/cli/serve.js +34 -4
- package/dist/cli/session-hooks.d.ts +4 -4
- package/dist/cli/session-hooks.js +265 -191
- package/dist/cli/setup.d.ts +2 -1
- package/dist/cli/setup.js +111 -45
- package/dist/cli/shared.d.ts +5 -95
- package/dist/cli/shared.js +18 -369
- package/dist/cli/slack.d.ts +2 -1
- package/dist/cli/slack.js +31 -55
- package/dist/cli/sleep-render.d.ts +4 -0
- package/dist/cli/sleep-render.js +61 -0
- package/dist/cli/sleep.d.ts +2 -8
- package/dist/cli/sleep.js +20 -76
- package/dist/cli/status.d.ts +3 -3
- package/dist/cli/status.js +39 -41
- package/dist/{stdin.js → cli/stdin.js} +6 -6
- package/dist/cli/transfer.d.ts +4 -4
- package/dist/cli/transfer.js +68 -42
- package/dist/cli/usage.js +8 -3
- package/dist/cli.d.ts +289 -5
- package/dist/cli.js +184 -117
- package/dist/connectors/dlq.d.ts +44 -0
- package/dist/connectors/dlq.js +30 -0
- package/dist/connectors/github/backfill.d.ts +1 -1
- package/dist/connectors/github/backfill.js +29 -66
- package/dist/connectors/github/cli-impl.js +59 -74
- package/dist/connectors/github/deletion.d.ts +5 -6
- package/dist/connectors/github/deletion.js +18 -52
- package/dist/connectors/github/dlq.d.ts +7 -61
- package/dist/connectors/github/dlq.js +19 -119
- package/dist/connectors/github/ingest.d.ts +2 -31
- package/dist/connectors/github/ingest.js +20 -82
- package/dist/connectors/github/octokit-client.d.ts +1 -1
- package/dist/connectors/github/octokit-client.js +2 -1
- package/dist/connectors/github/tenant-routing.d.ts +2 -2
- package/dist/connectors/github/tenant-routing.js +10 -36
- package/dist/connectors/github/transform.d.ts +1 -1
- package/dist/connectors/github/types.d.ts +1 -1
- package/dist/connectors/github/types.js +15 -18
- package/dist/connectors/github/webhook.d.ts +3 -2
- package/dist/connectors/github/webhook.js +84 -87
- package/dist/connectors/slack/backfill.d.ts +1 -1
- package/dist/connectors/slack/backfill.js +5 -29
- package/dist/connectors/slack/deletion.d.ts +4 -7
- package/dist/connectors/slack/deletion.js +20 -48
- package/dist/connectors/slack/dlq.d.ts +7 -49
- package/dist/connectors/slack/dlq.js +25 -118
- package/dist/connectors/slack/ingest.d.ts +5 -18
- package/dist/connectors/slack/ingest.js +27 -90
- package/dist/connectors/slack/signature.js +2 -1
- package/dist/connectors/slack/tenant-routing.d.ts +4 -1
- package/dist/connectors/slack/tenant-routing.js +13 -14
- package/dist/connectors/slack/transform.d.ts +1 -1
- package/dist/connectors/slack/types.d.ts +1 -1
- package/dist/connectors/slack/types.js +3 -12
- package/dist/connectors/slack/web-client.js +2 -2
- package/dist/connectors/slack/webhook.d.ts +3 -2
- package/dist/connectors/slack/webhook.js +75 -82
- package/dist/connectors/slack/workspaces.d.ts +4 -17
- package/dist/connectors/slack/workspaces.js +4 -34
- package/dist/consolidate/conflicts.d.ts +1 -1
- package/dist/consolidate/conflicts.js +4 -4
- package/dist/{dag.d.ts → consolidate/dag.d.ts} +1 -1
- package/dist/{dag.js → consolidate/dag.js} +60 -81
- package/dist/consolidate/decay.d.ts +2 -2
- package/dist/consolidate/decay.js +28 -22
- package/dist/{dedupe.js → consolidate/dedupe.js} +11 -19
- package/dist/consolidate/flush-units.d.ts +2 -2
- package/dist/{half-life-migration.d.ts → consolidate/half-life-migration.d.ts} +3 -9
- package/dist/consolidate/half-life-migration.js +106 -0
- package/dist/consolidate/llm-passes.js +8 -8
- package/dist/{memory-value.d.ts → consolidate/memory-value.d.ts} +7 -2
- package/dist/{memory-value.js → consolidate/memory-value.js} +9 -7
- package/dist/consolidate/merge.js +57 -54
- package/dist/{merged-row.d.ts → consolidate/merged-row.d.ts} +1 -1
- package/dist/{merged-row.js → consolidate/merged-row.js} +2 -2
- package/dist/consolidate/physics-pass.js +46 -46
- package/dist/{replay.d.ts → consolidate/replay.d.ts} +1 -1
- package/dist/{replay.js → consolidate/replay.js} +2 -2
- package/dist/consolidate/run.d.ts +7 -13
- package/dist/consolidate/run.js +6 -37
- package/dist/consolidate/sleep.d.ts +1 -1
- package/dist/consolidate/sleep.js +64 -134
- package/dist/{trace.js → consolidate/trace.js} +4 -6
- package/dist/consolidate/traces.js +34 -29
- package/dist/{ablation.js → core/ablation.js} +1 -1
- package/dist/{agent-memories/tools.d.ts → core/agent-memory-tools.d.ts} +1 -1
- package/dist/{agent-memories/tools.js → core/agent-memory-tools.js} +1 -1
- package/dist/{ambient.js → core/ambient.js} +12 -10
- package/dist/{capture-contract.d.ts → core/capture-contract.d.ts} +16 -3
- package/dist/core/capture-contract.js +149 -0
- package/dist/{compare.d.ts → core/compare.d.ts} +2 -0
- package/dist/{compare.js → core/compare.js} +10 -3
- package/dist/{config.d.ts → core/config.d.ts} +6 -6
- package/dist/{config.js → core/config.js} +99 -72
- package/dist/core/handoff.js +87 -0
- package/dist/{memory-quality.js → core/memory-quality.js} +1 -1
- package/dist/{memory.d.ts → core/memory.d.ts} +19 -5
- package/dist/{memory.js → core/memory.js} +117 -82
- package/dist/{physics.d.ts → core/physics.d.ts} +1 -1
- package/dist/{physics.js → core/physics.js} +2 -1
- package/dist/{project-identity.d.ts → core/project-identity.d.ts} +0 -5
- package/dist/{project-identity.js → core/project-identity.js} +5 -17
- package/dist/{project-remote.js → core/project-remote.js} +4 -4
- package/dist/{prompt-recall.d.ts → core/prompt-recall.d.ts} +5 -0
- package/dist/{prompt-recall.js → core/prompt-recall.js} +14 -1
- package/dist/{salience.js → core/salience.js} +35 -20
- package/dist/{search/types.d.ts → core/search-types.d.ts} +2 -2
- package/dist/{search/types.js → core/search-types.js} +1 -1
- package/dist/core/session-digest-row.d.ts +5 -0
- package/dist/core/session-digest-row.js +6 -0
- package/dist/{dashboard-actions.d.ts → dashboard/dashboard-actions.d.ts} +1 -1
- package/dist/{dashboard-actions.js → dashboard/dashboard-actions.js} +5 -5
- package/dist/{dashboard-queries.d.ts → dashboard/dashboard-queries.d.ts} +7 -2
- package/dist/{dashboard-queries.js → dashboard/dashboard-queries.js} +6 -10
- package/dist/{dashboard-snapshot.d.ts → dashboard/dashboard-snapshot.d.ts} +9 -9
- package/dist/{dashboard-snapshot.js → dashboard/dashboard-snapshot.js} +101 -104
- package/dist/{dashboard.js → dashboard/dashboard.js} +124 -53
- package/dist/db/backup.js +1 -1
- package/dist/db/busy.d.ts +18 -1
- package/dist/db/busy.js +74 -9
- package/dist/db/connect.d.ts +10 -2
- package/dist/db/connect.js +43 -10
- package/dist/db/index.d.ts +9 -0
- package/dist/db/index.js +8 -0
- package/dist/db/meta.d.ts +4 -0
- package/dist/db/meta.js +11 -1
- package/dist/db/migrate.d.ts +8 -1
- package/dist/db/migrate.js +25 -30
- package/dist/db/migrations/v08.js +1 -1
- package/dist/db/migrations/v14.js +39 -35
- package/dist/db/migrations/v16.js +29 -26
- package/dist/db/migrations/v18.js +6 -5
- package/dist/db/migrations/v20.js +4 -2
- package/dist/db/migrations/v22.js +39 -36
- package/dist/db/migrations/v24.js +27 -22
- package/dist/db/migrations/v29.js +37 -32
- package/dist/db/migrations/v31.js +36 -31
- package/dist/db/migrations/v35.js +1 -1
- package/dist/db/migrations/v39.js +1 -1
- package/dist/db/migrations/v40.js +15 -14
- package/dist/db/migrations/v43.js +7 -6
- package/dist/db/migrations/v44.js +1 -1
- package/dist/db/migrations/v45.js +1 -1
- package/dist/db/migrations/v46.js +1 -1
- package/dist/db/migrations/v47.js +1 -1
- package/dist/db/migrations/v48.js +1 -1
- package/dist/db/migrations/v49.js +1 -1
- package/dist/db/migrations/v50.js +8 -7
- package/dist/db/migrations/v52.js +1 -1
- package/dist/db/open.d.ts +9 -1
- package/dist/db/open.js +21 -4
- package/dist/{physics-state.d.ts → db/physics-state.d.ts} +3 -3
- package/dist/{physics-state.js → db/physics-state.js} +9 -16
- package/dist/{raw-archive-mirror-cleanup.d.ts → db/raw-archive-mirror-cleanup.d.ts} +5 -5
- package/dist/{raw-archive-mirror-cleanup.js → db/raw-archive-mirror-cleanup.js} +11 -6
- package/dist/db/request-stores.d.ts +15 -2
- package/dist/db/request-stores.js +37 -15
- package/dist/db/tables.d.ts +2 -0
- package/dist/db/tables.js +6 -0
- package/dist/{vector-store.d.ts → db/vector-store.d.ts} +4 -2
- package/dist/{vector-store.js → db/vector-store.js} +76 -51
- package/dist/db/wal-checkpointer.d.ts +11 -0
- package/dist/db/wal-checkpointer.js +92 -0
- package/dist/doctor.js +105 -136
- package/dist/entry/json-hooks.d.ts +1 -1
- package/dist/entry/json-hooks.js +1 -1
- package/dist/entry/project-identity.d.ts +1 -1
- package/dist/entry/project-identity.js +1 -1
- package/dist/entry/session-text.d.ts +3 -3
- package/dist/entry/session-text.js +3 -3
- package/dist/{eval-stats.js → eval/eval-stats.js} +12 -9
- package/dist/{eval-suite.d.ts → eval/eval-suite.d.ts} +1 -1
- package/dist/{eval-suite.js → eval/eval-suite.js} +25 -23
- package/dist/{eval.d.ts → eval/eval.d.ts} +1 -1
- package/dist/{eval.js → eval/eval.js} +29 -22
- package/dist/{judgment.d.ts → eval/judgment.d.ts} +1 -3
- package/dist/{judgment.js → eval/judgment.js} +4 -9
- package/dist/extensions/openclaw-plugin/index.js +1 -2
- package/dist/graph/delta.d.ts +3 -2
- package/dist/graph/delta.js +9 -23
- package/dist/{graph-extract.d.ts → graph/extract.d.ts} +6 -6
- package/dist/{graph-extract.js → graph/extract.js} +37 -52
- package/dist/{graph-recall.d.ts → graph/recall.d.ts} +2 -2
- package/dist/{graph-recall.js → graph/recall.js} +55 -36
- package/dist/{graph-stream.d.ts → graph/stream.d.ts} +2 -2
- package/dist/{graph-stream.js → graph/stream.js} +9 -7
- package/dist/{graph-view.d.ts → graph/view.d.ts} +6 -3
- package/dist/{graph-view.js → graph/view.js} +127 -167
- package/dist/graph/write.d.ts +4 -76
- package/dist/graph/write.js +13 -397
- package/dist/hooks/codex-session.js +1 -1
- package/dist/hooks/codex-wrapper.js +14 -15
- package/dist/hooks/copilot.d.ts +48 -13
- package/dist/hooks/copilot.js +124 -39
- package/dist/{cli → hooks}/hook-blocks.js +1 -1
- package/dist/hooks/json-hooks.d.ts +3 -1
- package/dist/hooks/json-hooks.js +40 -122
- package/dist/hooks/opencode.js +35 -27
- package/dist/hooks/shared.d.ts +7 -5
- package/dist/hooks/shared.js +19 -8
- package/dist/importers/core.d.ts +2 -6
- package/dist/importers/core.js +41 -39
- package/dist/importers/markdown-parse.d.ts +1 -10
- package/dist/importers/markdown-parse.js +2 -19
- package/dist/importers/markdown.js +2 -1
- package/dist/importers/sources.js +50 -46
- package/dist/importers/vault.js +71 -92
- package/dist/index.d.ts +22 -22
- package/dist/index.js +21 -21
- package/dist/{autolearn.d.ts → learn/autolearn.d.ts} +2 -2
- package/dist/{autolearn.js → learn/autolearn.js} +13 -11
- package/dist/{churn-git.d.ts → learn/churn-git.d.ts} +1 -1
- package/dist/{churn-git.js → learn/churn-git.js} +6 -4
- package/dist/{extract.d.ts → learn/extract.d.ts} +1 -1
- package/dist/learn/extract.js +125 -0
- package/dist/{forward-claim-detector.d.ts → learn/forward-claim-detector.d.ts} +1 -1
- package/dist/{forward-claim-detector.js → learn/forward-claim-detector.js} +1 -1
- package/dist/{invalidation.d.ts → learn/invalidation.d.ts} +4 -0
- package/dist/{invalidation.js → learn/invalidation.js} +83 -99
- package/dist/mcp/admin-tools.d.ts +1 -1
- package/dist/mcp/admin-tools.js +37 -60
- package/dist/mcp/format.d.ts +5 -5
- package/dist/mcp/format.js +7 -6
- package/dist/mcp/framing.d.ts +6 -0
- package/dist/mcp/framing.js +11 -3
- package/dist/mcp/memory-tools.d.ts +2 -2
- package/dist/mcp/memory-tools.js +12 -31
- package/dist/mcp/protocol.d.ts +6 -10
- package/dist/mcp/protocol.js +8 -14
- package/dist/mcp/recall-tools.d.ts +2 -2
- package/dist/mcp/recall-tools.js +68 -50
- package/dist/mcp/request.js +65 -63
- package/dist/mcp/server.js +1 -1
- package/dist/mcp/session-state.d.ts +1 -2
- package/dist/mcp/session-state.js +2 -2
- package/dist/mcp/shared-gate.js +1 -1
- package/dist/mcp/stdio.js +69 -31
- package/dist/mcp/tool-args.js +2 -1
- package/dist/mcp/tools.js +2 -2
- package/dist/{customer-notes.d.ts → objects/customer-notes.d.ts} +7 -24
- package/dist/objects/customer-notes.js +112 -0
- package/dist/{decisions.d.ts → objects/decisions.d.ts} +13 -28
- package/dist/objects/decisions.js +101 -0
- package/dist/objects/descriptor.d.ts +52 -0
- package/dist/objects/descriptor.js +4 -0
- package/dist/objects/fields.d.ts +15 -0
- package/dist/objects/fields.js +21 -0
- package/dist/{incidents.d.ts → objects/incidents.d.ts} +17 -44
- package/dist/objects/incidents.js +130 -0
- package/dist/objects/lifecycle.d.ts +27 -0
- package/dist/objects/lifecycle.js +96 -0
- package/dist/{policies.d.ts → objects/policies.d.ts} +14 -27
- package/dist/objects/policies.js +189 -0
- package/dist/{processes.d.ts → objects/processes.d.ts} +14 -34
- package/dist/objects/processes.js +146 -0
- package/dist/{project-briefs.d.ts → objects/project-briefs.d.ts} +19 -40
- package/dist/objects/project-briefs.js +255 -0
- package/dist/{skills.d.ts → objects/skills.d.ts} +11 -26
- package/dist/objects/skills.js +156 -0
- package/dist/postinstall.js +4 -2
- package/dist/predictions/planning-fallacy.d.ts +4 -76
- package/dist/predictions/planning-fallacy.js +4 -129
- package/dist/rerankers/clef.d.ts +2 -6
- package/dist/rerankers/clef.js +27 -47
- package/dist/rerankers/cross-encoder.d.ts +0 -7
- package/dist/rerankers/cross-encoder.js +15 -23
- package/dist/rerankers/index.js +8 -7
- package/dist/rerankers/jev.d.ts +1 -4
- package/dist/rerankers/jev.js +30 -49
- package/dist/rerankers/llm.d.ts +2 -4
- package/dist/rerankers/llm.js +33 -50
- package/dist/rerankers/outage-warning.d.ts +7 -0
- package/dist/rerankers/outage-warning.js +31 -0
- package/dist/rerankers/remote.d.ts +3 -0
- package/dist/rerankers/remote.js +23 -0
- package/dist/rerankers/types.d.ts +1 -1
- package/dist/search/as-of.d.ts +1 -1
- package/dist/search/bm25-search.d.ts +2 -2
- package/dist/search/bm25-search.js +7 -7
- package/dist/search/bm25.d.ts +1 -1
- package/dist/search/bm25.js +1 -1
- package/dist/search/boosts.d.ts +5 -1
- package/dist/search/boosts.js +34 -13
- package/dist/search/breakdown.d.ts +2 -2
- package/dist/search/breakdown.js +2 -1
- package/dist/search/explain.d.ts +1 -1
- package/dist/search/explain.js +3 -2
- package/dist/search/finalize.d.ts +2 -2
- package/dist/search/finalize.js +4 -3
- package/dist/search/fusion.d.ts +1 -1
- package/dist/search/fusion.js +3 -3
- package/dist/search/hybrid-score.d.ts +2 -2
- package/dist/search/hybrid-score.js +1 -1
- package/dist/search/hybrid.d.ts +4 -4
- package/dist/search/hybrid.js +11 -8
- package/dist/{multihop.d.ts → search/multihop.d.ts} +2 -2
- package/dist/{multihop.js → search/multihop.js} +7 -5
- package/dist/{path-context.js → search/path-context.js} +3 -1
- package/dist/search/physics-search.d.ts +4 -4
- package/dist/search/physics-search.js +15 -15
- package/dist/search/rerank.d.ts +3 -3
- package/dist/search/rerank.js +4 -3
- package/dist/search/temporal.d.ts +1 -1
- package/dist/search/temporal.js +5 -2
- package/dist/search/vector.d.ts +3 -3
- package/dist/search/vector.js +17 -11
- package/dist/server/auth.d.ts +1 -1
- package/dist/server/auth.js +26 -18
- package/dist/server/boot.d.ts +24 -0
- package/dist/server/boot.js +465 -0
- package/dist/server/client-ip.d.ts +5 -1
- package/dist/server/client-ip.js +18 -6
- package/dist/server/cursor.d.ts +1 -1
- package/dist/server/cursor.js +2 -3
- package/dist/server/deadline.d.ts +13 -0
- package/dist/server/deadline.js +45 -0
- package/dist/server/key-check-bounds.d.ts +8 -0
- package/dist/server/key-check-bounds.js +46 -0
- package/dist/server/lifecycle.js +1 -1
- package/dist/server/mcp-http.d.ts +1 -4
- package/dist/server/mcp-http.js +34 -24
- package/dist/server/ready.d.ts +7 -0
- package/dist/server/ready.js +38 -0
- package/dist/server/request.d.ts +10 -4
- package/dist/server/request.js +63 -12
- package/dist/server/route-table.d.ts +15 -0
- package/dist/server/route-table.js +209 -0
- package/dist/server/routes/admin.js +13 -8
- package/dist/server/routes/customer-notes.d.ts +5 -5
- package/dist/server/routes/customer-notes.js +32 -97
- package/dist/server/routes/decisions.d.ts +5 -5
- package/dist/server/routes/decisions.js +42 -105
- package/dist/server/routes/incidents.d.ts +5 -5
- package/dist/server/routes/incidents.js +42 -95
- package/dist/server/routes/memories.js +21 -20
- package/dist/server/routes/object-routes.d.ts +40 -0
- package/dist/server/routes/object-routes.js +80 -0
- package/dist/server/routes/policies.d.ts +6 -6
- package/dist/server/routes/policies.js +40 -124
- package/dist/server/routes/predictions.js +29 -45
- package/dist/server/routes/processes.d.ts +5 -5
- package/dist/server/routes/processes.js +38 -118
- package/dist/server/routes/project-briefs.d.ts +6 -6
- package/dist/server/routes/project-briefs.js +38 -110
- package/dist/server/routes/recall.js +14 -12
- package/dist/server/routes/skills.d.ts +6 -6
- package/dist/server/routes/skills.js +37 -125
- package/dist/{server-detect.js → server/server-detect.js} +3 -2
- package/dist/server/sleep-child.d.ts +2 -0
- package/dist/server/sleep-child.js +19 -0
- package/dist/server/sleep-offload.d.ts +20 -0
- package/dist/server/sleep-offload.js +70 -0
- package/dist/server/tls.d.ts +6 -0
- package/dist/server/tls.js +24 -0
- package/dist/server/types.d.ts +27 -8
- package/dist/server/validation.d.ts +3 -4
- package/dist/server/validation.js +6 -11
- package/dist/server.d.ts +41 -50
- package/dist/server.js +26 -560
- package/dist/{project-merge.d.ts → sharing/project-merge.d.ts} +1 -1
- package/dist/{project-merge.js → sharing/project-merge.js} +26 -45
- package/dist/{scope.js → sharing/scope.js} +1 -1
- package/dist/{shared.d.ts → sharing/shared.d.ts} +10 -9
- package/dist/{shared.js → sharing/shared.js} +100 -77
- package/dist/{ambient-store.d.ts → store/ambient.d.ts} +2 -2
- package/dist/{ambient-store.js → store/ambient.js} +10 -10
- package/dist/store/audit-event.d.ts +12 -6
- package/dist/store/audit-event.js +6 -5
- package/dist/{audit.d.ts → store/audit.d.ts} +27 -3
- package/dist/{audit.js → store/audit.js} +91 -6
- package/dist/{auth.d.ts → store/auth.d.ts} +15 -32
- package/dist/{auth.js → store/auth.js} +100 -92
- package/dist/store/candidates.d.ts +23 -12
- package/dist/store/candidates.js +87 -35
- package/dist/{card-detail.d.ts → store/card-detail.d.ts} +3 -3
- package/dist/{card-detail.js → store/card-detail.js} +1 -1
- package/dist/{store-cards.d.ts → store/cards.d.ts} +14 -9
- package/dist/{store-cards.js → store/cards.js} +85 -146
- package/dist/store/compactions.d.ts +78 -0
- package/dist/store/compactions.js +93 -0
- package/dist/store/conflicts.d.ts +22 -5
- package/dist/store/conflicts.js +160 -109
- package/dist/store/connectors/github.d.ts +84 -0
- package/dist/store/connectors/github.js +180 -0
- package/dist/store/connectors/slack.d.ts +69 -0
- package/dist/store/connectors/slack.js +177 -0
- package/dist/store/dashboard-reads.d.ts +27 -0
- package/dist/store/dashboard-reads.js +92 -0
- package/dist/store/delete-and-batch.d.ts +20 -24
- package/dist/store/delete-and-batch.js +64 -40
- package/dist/{delivery-recorder.d.ts → store/delivery-recorder.d.ts} +12 -5
- package/dist/{delivery-recorder.js → store/delivery-recorder.js} +42 -30
- package/dist/store/descendant-page.d.ts +12 -0
- package/dist/store/descendant-page.js +99 -0
- package/dist/store/diagnostics.d.ts +47 -0
- package/dist/store/diagnostics.js +51 -0
- package/dist/store/doctor-reads.d.ts +16 -0
- package/dist/store/doctor-reads.js +19 -0
- package/dist/{dormant.d.ts → store/dormant.d.ts} +46 -12
- package/dist/{dormant.js → store/dormant.js} +151 -6
- package/dist/{embeddings.d.ts → store/embeddings/index.d.ts} +10 -6
- package/dist/{embeddings.js → store/embeddings/index.js} +60 -44
- package/dist/{local-embedding.d.ts → store/embeddings/local.d.ts} +1 -1
- package/dist/{local-embedding.js → store/embeddings/local.js} +68 -57
- package/dist/{embedding-provider.d.ts → store/embeddings/provider.d.ts} +2 -2
- package/dist/{embedding-provider.js → store/embeddings/provider.js} +47 -32
- package/dist/store/entry-reads.d.ts +46 -7
- package/dist/store/entry-reads.js +120 -21
- package/dist/store/entry-row.d.ts +8 -2
- package/dist/store/entry-row.js +28 -8
- package/dist/store/entry-writes.d.ts +33 -4
- package/dist/store/entry-writes.js +108 -26
- package/dist/{failure-log.d.ts → store/failure-log.d.ts} +7 -2
- package/dist/{failure-log.js → store/failure-log.js} +9 -2
- package/dist/{goals.d.ts → store/goals.d.ts} +6 -46
- package/dist/{goals.js → store/goals.js} +45 -94
- package/dist/store/graph-queue.d.ts +29 -0
- package/dist/store/graph-queue.js +101 -0
- package/dist/{graph/read.d.ts → store/graph-reads.d.ts} +26 -34
- package/dist/{graph/read.js → store/graph-reads.js} +63 -115
- package/dist/{graph/types.d.ts → store/graph-rows.d.ts} +68 -8
- package/dist/{graph/rows.js → store/graph-rows.js} +14 -3
- package/dist/store/graph-view-rows.d.ts +12 -0
- package/dist/store/graph-view-rows.js +67 -0
- package/dist/store/graph-writes.d.ts +58 -0
- package/dist/store/graph-writes.js +256 -0
- package/dist/store/half-life.d.ts +34 -0
- package/dist/store/half-life.js +77 -0
- package/dist/store/handoffs.d.ts +6 -3
- package/dist/store/handoffs.js +70 -31
- package/dist/store/index-and-stats.d.ts +8 -1
- package/dist/store/index-and-stats.js +51 -48
- package/dist/store/index.d.ts +4 -0
- package/dist/store/index.js +3 -0
- package/dist/store/key-audit.d.ts +2 -2
- package/dist/store/key-audit.js +4 -4
- package/dist/store/key-writes.d.ts +12 -5
- package/dist/store/key-writes.js +30 -4
- package/dist/store/ledger-turn.d.ts +17 -0
- package/dist/store/ledger-turn.js +27 -0
- package/dist/store/markdown.d.ts +1 -1
- package/dist/store/markdown.js +4 -3
- package/dist/store/mirrors.d.ts +5 -7
- package/dist/store/mirrors.js +39 -25
- package/dist/store/object-types.d.ts +189 -0
- package/dist/store/object-types.js +4 -0
- package/dist/store/open.d.ts +8 -4
- package/dist/store/open.js +34 -23
- package/dist/store/planning-fallacy-evidence.d.ts +42 -0
- package/dist/store/planning-fallacy-evidence.js +81 -0
- package/dist/store/port.d.ts +646 -0
- package/dist/store/port.js +17 -0
- package/dist/{predictions/store.d.ts → store/predictions.d.ts} +15 -2
- package/dist/{predictions/store.js → store/predictions.js} +52 -67
- package/dist/{quarantine.d.ts → store/quarantine.d.ts} +8 -8
- package/dist/{quarantine.js → store/quarantine.js} +64 -22
- package/dist/{raw-archive.d.ts → store/raw-archive.d.ts} +5 -3
- package/dist/{raw-archive.js → store/raw-archive.js} +11 -5
- package/dist/{recall-scope.d.ts → store/recall-scope.d.ts} +4 -7
- package/dist/{recall-scope.js → store/recall-scope.js} +8 -9
- package/dist/{recall-trace.d.ts → store/recall-trace.d.ts} +13 -14
- package/dist/{recall-trace.js → store/recall-trace.js} +38 -43
- package/dist/store/rejected-values.d.ts +55 -0
- package/dist/store/rejected-values.js +162 -0
- package/dist/{rejection.d.ts → store/rejection.d.ts} +2 -2
- package/dist/{rejection.js → store/rejection.js} +3 -2
- package/dist/store/rows.d.ts +2 -3
- package/dist/store/rows.js +18 -11
- package/dist/store/search-rows.d.ts +15 -4
- package/dist/store/search-rows.js +43 -36
- package/dist/store/sessions.d.ts +18 -2
- package/dist/store/sessions.js +83 -46
- package/dist/store/sqlite/commit-watch.d.ts +4 -0
- package/dist/store/sqlite/commit-watch.js +29 -0
- package/dist/store/sqlite/connector-events-group.d.ts +5 -0
- package/dist/store/sqlite/connector-events-group.js +50 -0
- package/dist/store/sqlite/connector-writes-group.d.ts +6 -0
- package/dist/store/sqlite/connector-writes-group.js +65 -0
- package/dist/store/sqlite/dag-reads-group.d.ts +3 -0
- package/dist/store/sqlite/dag-reads-group.js +45 -0
- package/dist/store/sqlite/entry-writes-group.d.ts +18 -0
- package/dist/store/sqlite/entry-writes-group.js +170 -0
- package/dist/store/sqlite/error-codec.d.ts +17 -0
- package/dist/store/sqlite/error-codec.js +59 -0
- package/dist/store/sqlite/executor-counts.d.ts +10 -0
- package/dist/store/sqlite/executor-counts.js +11 -0
- package/dist/store/sqlite/executor.d.ts +28 -0
- package/dist/store/sqlite/executor.js +286 -0
- package/dist/store/sqlite/graph-reads-group.d.ts +5 -0
- package/dist/store/sqlite/graph-reads-group.js +18 -0
- package/dist/store/sqlite/local.d.ts +21 -0
- package/dist/store/sqlite/local.js +38 -0
- package/dist/store/sqlite/object-rows.d.ts +102 -0
- package/dist/store/sqlite/object-rows.js +218 -0
- package/dist/store/sqlite/objects-group.d.ts +20 -0
- package/dist/store/sqlite/objects-group.js +314 -0
- package/dist/store/sqlite/predictions-group.d.ts +5 -0
- package/dist/store/sqlite/predictions-group.js +28 -0
- package/dist/store/sqlite/quarantine-group.d.ts +5 -0
- package/dist/store/sqlite/quarantine-group.js +38 -0
- package/dist/store/sqlite/store.d.ts +26 -0
- package/dist/store/sqlite/store.js +295 -0
- package/dist/store/sqlite/vector-pack.d.ts +18 -0
- package/dist/store/sqlite/vector-pack.js +46 -0
- package/dist/store/sqlite/vector-reads-group.d.ts +3 -0
- package/dist/store/sqlite/vector-reads-group.js +23 -0
- package/dist/store/sqlite/worker-entry.d.ts +2 -0
- package/dist/store/sqlite/worker-entry.js +8 -0
- package/dist/store/sqlite/worker-jobs.d.ts +5 -0
- package/dist/store/sqlite/worker-jobs.js +116 -0
- package/dist/store/sqlite/worker-ops.d.ts +124 -0
- package/dist/store/sqlite/worker-ops.js +82 -0
- package/dist/store/sqlite/worker-store.d.ts +8 -0
- package/dist/store/sqlite/worker-store.js +76 -0
- package/dist/store/summaries.d.ts +2 -11
- package/dist/store/summaries.js +17 -44
- package/dist/{summary-dirty.d.ts → store/summary-dirty.d.ts} +1 -1
- package/dist/store/tenant-lookup.d.ts +1 -1
- package/dist/{tenant.d.ts → store/tenant.d.ts} +2 -2
- package/dist/{tenant.js → store/tenant.js} +1 -1
- package/dist/store/token-ledger-rows.d.ts +61 -0
- package/dist/store/token-ledger-rows.js +68 -0
- package/dist/{token-ledger.d.ts → store/token-ledger.d.ts} +2 -9
- package/dist/{token-ledger.js → store/token-ledger.js} +31 -78
- package/dist/store/tombstone-checks.d.ts +12 -0
- package/dist/store/tombstone-checks.js +31 -0
- package/dist/store/usage-reports.d.ts +7 -0
- package/dist/store/usage-reports.js +26 -0
- package/dist/store/vector-writes.d.ts +10 -3
- package/dist/store/vector-writes.js +35 -5
- package/dist/{working-memory.d.ts → store/working-memory.d.ts} +5 -1
- package/dist/{working-memory.js → store/working-memory.js} +39 -41
- package/dist/support-bundle.d.ts +1 -1
- package/dist/support-bundle.js +13 -33
- package/dist/{gated-write.d.ts → trust/gated-write.d.ts} +2 -2
- package/dist/{gated-write.js → trust/gated-write.js} +6 -6
- package/dist/trust/quarantine.d.ts +4 -0
- package/dist/trust/quarantine.js +8 -0
- package/dist/trust/reject-flow.d.ts +23 -0
- package/dist/trust/reject-flow.js +67 -0
- package/dist/util/anthropic-messages.d.ts +31 -0
- package/dist/util/anthropic-messages.js +46 -0
- package/dist/util/atomic-write.d.ts +3 -0
- package/dist/util/atomic-write.js +107 -0
- package/dist/util/crash-handlers.d.ts +5 -0
- package/dist/util/crash-handlers.js +30 -0
- package/dist/{env.d.ts → util/env.d.ts} +17 -2
- package/dist/{env.js → util/env.js} +22 -2
- package/dist/util/home-path.js +67 -0
- package/dist/{http-retry.d.ts → util/http-retry.d.ts} +6 -2
- package/dist/{http-retry.js → util/http-retry.js} +38 -7
- package/dist/{http-util.d.ts → util/http-util.d.ts} +14 -3
- package/dist/{http-util.js → util/http-util.js} +31 -11
- package/dist/util/json.d.ts +17 -0
- package/dist/util/json.js +25 -0
- package/dist/{log.d.ts → util/log.d.ts} +5 -2
- package/dist/{log.js → util/log.js} +12 -3
- package/dist/util/real-path.d.ts +3 -0
- package/dist/util/real-path.js +15 -0
- package/dist/util/request-scope.d.ts +27 -0
- package/dist/util/request-scope.js +47 -0
- package/dist/{same-text.d.ts → util/same-text.d.ts} +1 -1
- package/dist/{secret-detect.js → util/secret-detect.js} +5 -4
- package/dist/util/stored-json.d.ts +9 -0
- package/dist/util/stored-json.js +8 -0
- package/dist/util/time.d.ts +2 -0
- package/dist/util/time.js +3 -0
- package/dist/util/token-text.d.ts +18 -0
- package/dist/util/token-text.js +23 -0
- package/dist/{version.d.ts → util/version.d.ts} +1 -1
- package/dist/{version.js → util/version.js} +1 -1
- package/extensions/openclaw-plugin/index.ts +1 -5
- package/extensions/openclaw-plugin/openclaw.plugin.json +1 -1
- package/extensions/openclaw-plugin/package.json +1 -1
- package/openclaw.plugin.json +1 -1
- package/package.json +2 -2
- package/dist/api.d.ts +0 -26
- package/dist/api.js +0 -29
- package/dist/capture-contract.js +0 -49
- package/dist/connectors/github/idempotency.d.ts +0 -19
- package/dist/connectors/github/idempotency.js +0 -27
- package/dist/connectors/slack/idempotency.d.ts +0 -17
- package/dist/connectors/slack/idempotency.js +0 -31
- package/dist/customer-notes.js +0 -336
- package/dist/db.d.ts +0 -9
- package/dist/db.js +0 -8
- package/dist/decisions.js +0 -326
- package/dist/extract.js +0 -133
- package/dist/graph/rows.d.ts +0 -45
- package/dist/graph/types.js +0 -11
- package/dist/half-life-migration.js +0 -182
- package/dist/handoff.js +0 -68
- package/dist/home-path.js +0 -24
- package/dist/incidents.js +0 -349
- package/dist/instruction-detect.js +0 -27
- package/dist/json.d.ts +0 -7
- package/dist/json.js +0 -11
- package/dist/ledger-db.d.ts +0 -10
- package/dist/ledger-db.js +0 -42
- package/dist/policies.js +0 -434
- package/dist/processes.js +0 -371
- package/dist/project-briefs.js +0 -523
- package/dist/reject-flow.d.ts +0 -69
- package/dist/reject-flow.js +0 -260
- package/dist/session-owners.d.ts +0 -7
- package/dist/session-owners.js +0 -54
- package/dist/skills.js +0 -367
- package/dist/store-port.d.ts +0 -191
- package/dist/store-port.js +0 -166
- /package/dist/{context-auto.d.ts → api/context-auto.d.ts} +0 -0
- /package/dist/{instruction-detect.d.ts → api/instruction-detect.d.ts} +0 -0
- /package/dist/{recall-history.d.ts → api/recall-history.d.ts} +0 -0
- /package/dist/{codex-patch.d.ts → capture/codex-patch.d.ts} +0 -0
- /package/dist/{compaction-items.d.ts → capture/compaction-items.d.ts} +0 -0
- /package/dist/{compaction-spool.d.ts → capture/compaction-spool.d.ts} +0 -0
- /package/dist/{share-scrub.d.ts → capture/share-scrub.d.ts} +0 -0
- /package/dist/{correction-latency.js → cli/correction-latency.js} +0 -0
- /package/dist/{provenance-coverage.js → cli/provenance-coverage.js} +0 -0
- /package/dist/{quality-repair.d.ts → cli/quality-repair.d.ts} +0 -0
- /package/dist/{stdin.d.ts → cli/stdin.d.ts} +0 -0
- /package/dist/{dedupe.d.ts → consolidate/dedupe.d.ts} +0 -0
- /package/dist/{memory-value-weights.d.ts → consolidate/memory-value-weights.d.ts} +0 -0
- /package/dist/{memory-value-weights.js → consolidate/memory-value-weights.js} +0 -0
- /package/dist/{overlap-index.d.ts → consolidate/overlap-index.d.ts} +0 -0
- /package/dist/{overlap-index.js → consolidate/overlap-index.js} +0 -0
- /package/dist/{trace.d.ts → consolidate/trace.d.ts} +0 -0
- /package/dist/{ablation.d.ts → core/ablation.d.ts} +0 -0
- /package/dist/{ambient.d.ts → core/ambient.d.ts} +0 -0
- /package/dist/{api-errors.d.ts → core/api-errors.d.ts} +0 -0
- /package/dist/{api-errors.js → core/api-errors.js} +0 -0
- /package/dist/{card.d.ts → core/card.d.ts} +0 -0
- /package/dist/{card.js → core/card.js} +0 -0
- /package/dist/{handoff.d.ts → core/handoff.d.ts} +0 -0
- /package/dist/{memory-quality.d.ts → core/memory-quality.d.ts} +0 -0
- /package/dist/{physics-config.d.ts → core/physics-config.d.ts} +0 -0
- /package/dist/{physics-config.js → core/physics-config.js} +0 -0
- /package/dist/{project-remote.d.ts → core/project-remote.d.ts} +0 -0
- /package/dist/{salience.d.ts → core/salience.d.ts} +0 -0
- /package/dist/{dashboard-params.d.ts → dashboard/dashboard-params.d.ts} +0 -0
- /package/dist/{dashboard-params.js → dashboard/dashboard-params.js} +0 -0
- /package/dist/{dashboard-types.d.ts → dashboard/dashboard-types.d.ts} +0 -0
- /package/dist/{dashboard-types.js → dashboard/dashboard-types.js} +0 -0
- /package/dist/{dashboard.d.ts → dashboard/dashboard.d.ts} +0 -0
- /package/dist/{eval-stats.d.ts → eval/eval-stats.d.ts} +0 -0
- /package/dist/{cli → hooks}/hook-blocks.d.ts +0 -0
- /package/dist/{path-context.d.ts → search/path-context.d.ts} +0 -0
- /package/dist/{rrf.d.ts → search/rrf.d.ts} +0 -0
- /package/dist/{rrf.js → search/rrf.js} +0 -0
- /package/dist/{rate-limit.d.ts → server/rate-limit.d.ts} +0 -0
- /package/dist/{rate-limit.js → server/rate-limit.js} +0 -0
- /package/dist/{server-detect.d.ts → server/server-detect.d.ts} +0 -0
- /package/dist/{scope.d.ts → sharing/scope.d.ts} +0 -0
- /package/dist/{summary-dirty.js → store/summary-dirty.js} +0 -0
- /package/dist/{yaml.d.ts → store/yaml.d.ts} +0 -0
- /package/dist/{yaml.js → store/yaml.js} +0 -0
- /package/dist/{escape.d.ts → util/escape.d.ts} +0 -0
- /package/dist/{escape.js → util/escape.js} +0 -0
- /package/dist/{home-path.d.ts → util/home-path.d.ts} +0 -0
- /package/dist/{keyset.d.ts → util/keyset.d.ts} +0 -0
- /package/dist/{keyset.js → util/keyset.js} +0 -0
- /package/dist/{same-text.js → util/same-text.js} +0 -0
- /package/dist/{secret-detect.d.ts → util/secret-detect.d.ts} +0 -0
- /package/dist/{db → util}/sqlite-blocked.d.ts +0 -0
- /package/dist/{db → util}/sqlite-blocked.js +0 -0
- /package/dist/{tokenize.d.ts → util/tokenize.d.ts} +0 -0
- /package/dist/{tokenize.js → util/tokenize.js} +0 -0
- /package/dist/{transcript-tail.d.ts → util/transcript-tail.d.ts} +0 -0
- /package/dist/{transcript-tail.js → util/transcript-tail.js} +0 -0
- /package/dist/{write-budget.d.ts → util/write-budget.d.ts} +0 -0
- /package/dist/{write-budget.js → util/write-budget.js} +0 -0
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
import { envGithubWebhookSecret, envGithubWebhookSecretPrevious } from '../../env.js';
|
|
1
|
+
import { envGithubWebhookSecret, envGithubWebhookSecretPrevious } from '../../util/env.js';
|
|
2
2
|
import { verifyGitHubSignature } from './signature.js';
|
|
3
3
|
import { isGitHubWebhookEnvelope, isGitHubIssueEvent, isGitHubIssueCommentEvent, isGitHubPullRequestEvent, isGitHubPullRequestReviewCommentEvent, } from './types.js';
|
|
4
4
|
import { ingestEvent as ingestGitHubEvent } from './ingest.js';
|
|
5
5
|
import { handleCommentDeleted as handleGitHubCommentDeleted } from './deletion.js';
|
|
6
|
-
import {
|
|
6
|
+
import { parkInDlq } from '../dlq.js';
|
|
7
|
+
import { githubDlq } from './dlq.js';
|
|
7
8
|
import { resolveTenantForGitHub } from './tenant-routing.js';
|
|
8
9
|
import { computeDeletionKey as computeGitHubDeletionKey } from './signature.js';
|
|
9
|
-
import { resolveTenantId } from '../../tenant.js';
|
|
10
|
-
import {
|
|
11
|
-
import { HttpError, JSON_HEADERS, isHeaderString, readBody, sendJson, } from '../../http-util.js';
|
|
10
|
+
import { resolveTenantId } from '../../store/tenant.js';
|
|
11
|
+
import { HttpError, JSON_HEADERS, isHeaderString, closeIfBodyUnread, readWebhookBody, sendJson, } from '../../util/http-util.js';
|
|
12
12
|
/**
|
|
13
13
|
* GitHub webhook receiver. Mirrors the Slack route shape but with
|
|
14
14
|
* GitHub-specific idioms:
|
|
@@ -25,10 +25,12 @@ import { HttpError, JSON_HEADERS, isHeaderString, readBody, sendJson, } from '..
|
|
|
25
25
|
*
|
|
26
26
|
* Bearer auth is skipped on purpose: server.ts checks isPublicRoute before calling this.
|
|
27
27
|
*/
|
|
28
|
-
export async function handleGitHubEventsWebhook(
|
|
29
|
-
const
|
|
28
|
+
export async function handleGitHubEventsWebhook(request, store) {
|
|
29
|
+
const { req, res, opts } = request;
|
|
30
|
+
// Secret and signature header before the body, so a caller with neither cannot make the server buffer one.
|
|
30
31
|
const secret = envGithubWebhookSecret();
|
|
31
32
|
if (!secret) {
|
|
33
|
+
closeIfBodyUnread(request);
|
|
32
34
|
res.writeHead(404, JSON_HEADERS);
|
|
33
35
|
res.end(JSON.stringify({ error: 'not found' }));
|
|
34
36
|
return;
|
|
@@ -40,18 +42,22 @@ export async function handleGitHubEventsWebhook({ req, res, opts }) {
|
|
|
40
42
|
const sigStr = isHeaderString(sigHdr) ? sigHdr : null;
|
|
41
43
|
const eventName = isHeaderString(eventHdr) ? eventHdr : null;
|
|
42
44
|
const deliveryId = isHeaderString(deliveryHdr) ? deliveryHdr : null;
|
|
43
|
-
if (sigStr === null
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
45
|
+
if (sigStr === null) {
|
|
46
|
+
closeIfBodyUnread(request);
|
|
47
|
+
throw new HttpError(401, 'invalid GitHub signature');
|
|
48
|
+
}
|
|
49
|
+
const rawBody = await readWebhookBody(request);
|
|
50
|
+
if (!verifyGitHubSignature({
|
|
51
|
+
rawBody,
|
|
52
|
+
signature: sigStr,
|
|
53
|
+
webhookSecret: secret,
|
|
54
|
+
previousSecret,
|
|
55
|
+
})) {
|
|
50
56
|
throw new HttpError(401, 'invalid GitHub signature');
|
|
51
57
|
}
|
|
52
58
|
// Signature OK from here on. Everything else is ACK-200; bad envelopes go
|
|
53
59
|
// to the DLQ and a human can replay later.
|
|
54
|
-
routeSignedDelivery({ hippoRoot: opts.hippoRoot, res, rawBody, eventName, deliveryId, signature: sigStr });
|
|
60
|
+
await routeSignedDelivery({ hippoRoot: opts.hippoRoot, store, res, rawBody, eventName, deliveryId, signature: sigStr });
|
|
55
61
|
}
|
|
56
62
|
const ALLOWED_EVENTS = new Set([
|
|
57
63
|
'issues',
|
|
@@ -59,28 +65,23 @@ const ALLOWED_EVENTS = new Set([
|
|
|
59
65
|
'pull_request',
|
|
60
66
|
'pull_request_review_comment',
|
|
61
67
|
]);
|
|
62
|
-
function
|
|
63
|
-
const
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
});
|
|
76
|
-
}
|
|
77
|
-
finally {
|
|
78
|
-
closeHippoDb(db);
|
|
79
|
-
}
|
|
68
|
+
async function parkAndAck(d, park) {
|
|
69
|
+
const row = {
|
|
70
|
+
tenantId: park.tenantId,
|
|
71
|
+
rawPayload: d.rawBody,
|
|
72
|
+
error: park.error,
|
|
73
|
+
bucket: park.bucket,
|
|
74
|
+
eventName: d.eventName,
|
|
75
|
+
deliveryId: d.deliveryId,
|
|
76
|
+
signature: d.signature,
|
|
77
|
+
installationId: park.installationId,
|
|
78
|
+
repoFullName: park.repoFullName,
|
|
79
|
+
};
|
|
80
|
+
await parkInDlq(githubDlq, d.hippoRoot, row, d.store);
|
|
80
81
|
sendJson(d.res, 200, { ok: true, status: 'dlq' });
|
|
81
82
|
}
|
|
82
|
-
function routeSignedDelivery(d) {
|
|
83
|
-
const body = parseEnvelopeOrPark(d);
|
|
83
|
+
async function routeSignedDelivery(d) {
|
|
84
|
+
const body = await parseEnvelopeOrPark(d);
|
|
84
85
|
if (body === null || d.deliveryId === null)
|
|
85
86
|
return;
|
|
86
87
|
const routing = {
|
|
@@ -89,18 +90,9 @@ function routeSignedDelivery(d) {
|
|
|
89
90
|
};
|
|
90
91
|
// Tenant resolution. Fail closed on multi-tenant installs with unknown
|
|
91
92
|
// routing - same policy as Slack.
|
|
92
|
-
|
|
93
|
-
{
|
|
94
|
-
const db = openHippoDb(d.hippoRoot);
|
|
95
|
-
try {
|
|
96
|
-
resolvedTenant = resolveTenantForGitHub(db, routing);
|
|
97
|
-
}
|
|
98
|
-
finally {
|
|
99
|
-
closeHippoDb(db);
|
|
100
|
-
}
|
|
101
|
-
}
|
|
93
|
+
const resolvedTenant = await resolveTenantForGitHub(d.hippoRoot, routing, d.store);
|
|
102
94
|
if (resolvedTenant === null) {
|
|
103
|
-
|
|
95
|
+
await parkAndAck(d, {
|
|
104
96
|
...routing,
|
|
105
97
|
tenantId: null,
|
|
106
98
|
error: `unroutable: installation_id=${routing.installationId ?? '(none)'} repo=${routing.repoFullName ?? '(none)'}`,
|
|
@@ -112,11 +104,12 @@ function routeSignedDelivery(d) {
|
|
|
112
104
|
hippoRoot: d.hippoRoot,
|
|
113
105
|
tenantId: resolvedTenant,
|
|
114
106
|
actor: { subject: 'connector:github', role: 'admin' },
|
|
107
|
+
store: d.store,
|
|
115
108
|
};
|
|
116
|
-
if (dispatchGitHubEvent(d, ctx, body, d.deliveryId, routing))
|
|
109
|
+
if (await dispatchGitHubEvent(d, ctx, body, d.deliveryId, routing))
|
|
117
110
|
return;
|
|
118
111
|
// Header allow-listed but body shape didn't satisfy the matching guard.
|
|
119
|
-
|
|
112
|
+
await parkAndAck(d, {
|
|
120
113
|
...routing,
|
|
121
114
|
tenantId: resolvedTenant,
|
|
122
115
|
error: `body shape did not match X-GitHub-Event=${d.eventName}`,
|
|
@@ -124,7 +117,7 @@ function routeSignedDelivery(d) {
|
|
|
124
117
|
});
|
|
125
118
|
}
|
|
126
119
|
/** Answers ping and parks every unusable body; returns the envelope only when ingest should go on. */
|
|
127
|
-
function parseEnvelopeOrPark(d) {
|
|
120
|
+
async function parseEnvelopeOrPark(d) {
|
|
128
121
|
// Cheap regex extraction of installation_id / repo for DLQ rows that fail
|
|
129
122
|
// to JSON.parse - gives operators something to triage.
|
|
130
123
|
const installationFromRaw = (() => {
|
|
@@ -135,8 +128,8 @@ function parseEnvelopeOrPark(d) {
|
|
|
135
128
|
const m = d.rawBody.match(/"full_name"\s*:\s*"([^"]+)"/);
|
|
136
129
|
return m ? m[1] : null;
|
|
137
130
|
})();
|
|
138
|
-
const parkRaw = (error, bucket) => {
|
|
139
|
-
|
|
131
|
+
const parkRaw = async (error, bucket) => {
|
|
132
|
+
await parkAndAck(d, {
|
|
140
133
|
tenantId: resolveTenantId({}),
|
|
141
134
|
error,
|
|
142
135
|
bucket,
|
|
@@ -169,53 +162,57 @@ function parseEnvelopeOrPark(d) {
|
|
|
169
162
|
return body;
|
|
170
163
|
}
|
|
171
164
|
/** Ingests, archives or parks by event header; false when no guard matched the body. */
|
|
172
|
-
function dispatchGitHubEvent(d, ctx, body, deliveryId, routing) {
|
|
173
|
-
const
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
165
|
+
async function dispatchGitHubEvent(d, ctx, body, deliveryId, routing) {
|
|
166
|
+
const action = deliveryAction(d.eventName, body);
|
|
167
|
+
if (action === null)
|
|
168
|
+
return false;
|
|
169
|
+
if (action.kind === 'manual-review') {
|
|
170
|
+
// GitHub does fire issues.deleted (admin-initiated). Don't archive - V1
|
|
171
|
+
// policy is to log and let an operator decide. Archive could lose the
|
|
172
|
+
// memory if the issue is being moved between accounts.
|
|
173
|
+
await parkAndAck(d, {
|
|
174
|
+
...routing,
|
|
175
|
+
tenantId: ctx.tenantId,
|
|
176
|
+
error: 'issues.deleted requires manual review',
|
|
177
|
+
bucket: 'unhandled',
|
|
178
|
+
});
|
|
179
|
+
}
|
|
180
|
+
else if (action.kind === 'archive-comment') {
|
|
180
181
|
// The "deleted:" key namespace keeps this from colliding with the ingest key for the
|
|
181
182
|
// same artifact; a shared key would make hasSeenKey skip the archive.
|
|
182
|
-
const idempotencyKey = computeGitHubDeletionKey(artifactRef, updatedAt);
|
|
183
|
-
const r = handleGitHubCommentDeleted(ctx, {
|
|
184
|
-
artifactRef,
|
|
183
|
+
const idempotencyKey = computeGitHubDeletionKey(action.artifactRef, action.updatedAt);
|
|
184
|
+
const r = await handleGitHubCommentDeleted(ctx, {
|
|
185
|
+
artifactRef: action.artifactRef,
|
|
185
186
|
idempotencyKey,
|
|
186
187
|
deliveryId,
|
|
187
|
-
eventName:
|
|
188
|
+
eventName: action.eventName,
|
|
188
189
|
});
|
|
189
|
-
sendJson(res, 200, { ok: true, status: r.status, archivedCount: r.archivedCount });
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
190
|
+
sendJson(d.res, 200, { ok: true, status: r.status, archivedCount: r.archivedCount });
|
|
191
|
+
}
|
|
192
|
+
else {
|
|
193
|
+
const r = await ingestGitHubEvent(ctx, { event: action.event, rawBody: d.rawBody, deliveryId });
|
|
194
|
+
sendJson(d.res, 200, { ok: true, status: r.status, memoryId: r.memoryId });
|
|
195
|
+
}
|
|
196
|
+
return true;
|
|
197
|
+
}
|
|
198
|
+
// Dispatch by event header. Type guards cross-check the body shape against
|
|
199
|
+
// the header so a payload of one event type cannot satisfy another's guard.
|
|
200
|
+
function deliveryAction(eventName, body) {
|
|
194
201
|
if (eventName === 'issues' && isGitHubIssueEvent(body, 'issues')) {
|
|
195
|
-
if (body.action === 'deleted')
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
// memory if the issue is being moved between accounts.
|
|
199
|
-
parkInDlq(d, {
|
|
200
|
-
...routing,
|
|
201
|
-
tenantId: ctx.tenantId,
|
|
202
|
-
error: 'issues.deleted requires manual review',
|
|
203
|
-
bucket: 'unhandled',
|
|
204
|
-
});
|
|
205
|
-
return true;
|
|
206
|
-
}
|
|
207
|
-
return ingest({ eventName: 'issues', payload: body });
|
|
202
|
+
if (body.action === 'deleted')
|
|
203
|
+
return { kind: 'manual-review' };
|
|
204
|
+
return { kind: 'ingest', event: { eventName: 'issues', payload: body } };
|
|
208
205
|
}
|
|
209
206
|
if (eventName === 'issue_comment' && isGitHubIssueCommentEvent(body, 'issue_comment')) {
|
|
210
207
|
if (body.action === 'deleted') {
|
|
211
208
|
const repo = body.repository?.full_name ?? '';
|
|
212
209
|
const artifactRef = `github://${repo}/issue/${body.issue.number}/comment/${body.comment.id}`;
|
|
213
|
-
return
|
|
210
|
+
return { kind: 'archive-comment', eventName, artifactRef, updatedAt: body.comment.updated_at ?? null };
|
|
214
211
|
}
|
|
215
|
-
return ingest
|
|
212
|
+
return { kind: 'ingest', event: { eventName: 'issue_comment', payload: body } };
|
|
216
213
|
}
|
|
217
214
|
if (eventName === 'pull_request' && isGitHubPullRequestEvent(body, 'pull_request')) {
|
|
218
|
-
return ingest
|
|
215
|
+
return { kind: 'ingest', event: { eventName: 'pull_request', payload: body } };
|
|
219
216
|
}
|
|
220
217
|
if (eventName === 'pull_request_review_comment' &&
|
|
221
218
|
isGitHubPullRequestReviewCommentEvent(body, 'pull_request_review_comment')) {
|
|
@@ -223,10 +220,10 @@ function dispatchGitHubEvent(d, ctx, body, deliveryId, routing) {
|
|
|
223
220
|
const repo = body.repository?.full_name ?? '';
|
|
224
221
|
const artifactRef = `github://${repo}/pull/${body.pull_request.number}/review_comment/${body.comment.id}`;
|
|
225
222
|
// Same "deleted:" key namespace as the issue_comment branch above.
|
|
226
|
-
return
|
|
223
|
+
return { kind: 'archive-comment', eventName, artifactRef, updatedAt: body.comment.updated_at ?? null };
|
|
227
224
|
}
|
|
228
|
-
return ingest
|
|
225
|
+
return { kind: 'ingest', event: { eventName: 'pull_request_review_comment', payload: body } };
|
|
229
226
|
}
|
|
230
|
-
return
|
|
227
|
+
return null;
|
|
231
228
|
}
|
|
232
229
|
//# sourceMappingURL=webhook.js.map
|
|
@@ -1,29 +1,5 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { saveSlackCursor, slackCursor } from '../../store/connectors/slack.js';
|
|
2
2
|
import { ingestMessage } from './ingest.js';
|
|
3
|
-
function readCursor(root, tenantId, channelId) {
|
|
4
|
-
const db = openHippoDb(root);
|
|
5
|
-
try {
|
|
6
|
-
// SAFETY: row shape matches the single `latest_ts` column named in the
|
|
7
|
-
// SELECT above; sqlite returns undefined when no row matches.
|
|
8
|
-
const row = db
|
|
9
|
-
.prepare(`SELECT latest_ts FROM slack_cursors WHERE tenant_id=? AND channel_id=?`)
|
|
10
|
-
.get(tenantId, channelId);
|
|
11
|
-
return row?.latest_ts ?? null;
|
|
12
|
-
}
|
|
13
|
-
finally {
|
|
14
|
-
closeHippoDb(db);
|
|
15
|
-
}
|
|
16
|
-
}
|
|
17
|
-
function writeCursor(root, tenantId, channelId, latestTs) {
|
|
18
|
-
const db = openHippoDb(root);
|
|
19
|
-
try {
|
|
20
|
-
db.prepare(`INSERT INTO slack_cursors (tenant_id, channel_id, latest_ts, updated_at) VALUES (?,?,?,?)
|
|
21
|
-
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());
|
|
22
|
-
}
|
|
23
|
-
finally {
|
|
24
|
-
closeHippoDb(db);
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
3
|
/**
|
|
28
4
|
* Page through `conversations.history` via the injected fetcher and ingest each
|
|
29
5
|
* message. The cursor is persisted to `slack_cursors` after every page so a
|
|
@@ -38,7 +14,7 @@ export async function backfillChannel(ctx, opts) {
|
|
|
38
14
|
// first page only. `cursor` starts null — Slack mints the next-page token
|
|
39
15
|
// and we feed it back. Mixing the two would feed a numeric ts as an opaque
|
|
40
16
|
// cursor and break against the live API on rerun.
|
|
41
|
-
const resumeFrom =
|
|
17
|
+
const resumeFrom = slackCursor(ctx.hippoRoot, ctx.tenantId, opts.channel.id);
|
|
42
18
|
let cursor = null;
|
|
43
19
|
let ingested = 0;
|
|
44
20
|
let pages = 0;
|
|
@@ -51,7 +27,7 @@ export async function backfillChannel(ctx, opts) {
|
|
|
51
27
|
});
|
|
52
28
|
pages++;
|
|
53
29
|
for (const msg of page.messages) {
|
|
54
|
-
const r = ingestMessage(ctx, {
|
|
30
|
+
const r = await ingestMessage(ctx, {
|
|
55
31
|
teamId: opts.teamId,
|
|
56
32
|
channel: opts.channel,
|
|
57
33
|
message: msg,
|
|
@@ -63,12 +39,12 @@ export async function backfillChannel(ctx, opts) {
|
|
|
63
39
|
latestTs = msg.ts;
|
|
64
40
|
if (opts.maxMessages && ingested >= opts.maxMessages) {
|
|
65
41
|
if (latestTs)
|
|
66
|
-
|
|
42
|
+
saveSlackCursor(ctx.hippoRoot, ctx.tenantId, opts.channel.id, latestTs);
|
|
67
43
|
return { ingested, pages };
|
|
68
44
|
}
|
|
69
45
|
}
|
|
70
46
|
if (latestTs)
|
|
71
|
-
|
|
47
|
+
saveSlackCursor(ctx.hippoRoot, ctx.tenantId, opts.channel.id, latestTs);
|
|
72
48
|
if (!page.next_cursor)
|
|
73
49
|
break;
|
|
74
50
|
cursor = page.next_cursor;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type Context } from '../../api.js';
|
|
1
|
+
import { type Context } from '../../api/index.js';
|
|
2
2
|
export interface DeletionInput {
|
|
3
3
|
teamId: string;
|
|
4
4
|
channelId: string;
|
|
@@ -10,10 +10,7 @@ export interface DeletionResult {
|
|
|
10
10
|
status: DeletionStatus;
|
|
11
11
|
memoryId: string | null;
|
|
12
12
|
}
|
|
13
|
-
/**
|
|
14
|
-
*
|
|
15
|
-
|
|
16
|
-
* and a crash cannot leave a retry hitting `not_found` instead of `duplicate`.
|
|
17
|
-
*/
|
|
18
|
-
export declare function handleMessageDeleted(ctx: Context, input: DeletionInput): DeletionResult;
|
|
13
|
+
/** Handles Slack `message_deleted`. The store logs the event in the archive's own transaction, so a crash cannot leave a retry
|
|
14
|
+
* answering `not_found` where `duplicate` is due. */
|
|
15
|
+
export declare function handleMessageDeleted(ctx: Context, input: DeletionInput): Promise<DeletionResult>;
|
|
19
16
|
//# sourceMappingURL=deletion.d.ts.map
|
|
@@ -1,54 +1,26 @@
|
|
|
1
|
-
import { archiveRaw } from '../../api.js';
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
const
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
// from tenant A could archive tenant B's raw row sharing the same
|
|
19
|
-
// artifact_ref. The `kind = 'raw'` filter prevents accidentally targeting
|
|
20
|
-
// distilled rows.
|
|
21
|
-
// SAFETY: row comes from the SELECT above, which projects only the
|
|
22
|
-
// `id` column; `.get` returns undefined when no row matches.
|
|
23
|
-
const row = db
|
|
24
|
-
.prepare(`SELECT id FROM memories WHERE artifact_ref = ? AND tenant_id = ? AND kind = 'raw'`)
|
|
25
|
-
.get(ref, ctx.tenantId);
|
|
26
|
-
memoryId = row?.id ?? null;
|
|
27
|
-
}
|
|
28
|
-
finally {
|
|
29
|
-
closeHippoDb(db);
|
|
30
|
-
}
|
|
1
|
+
import { archiveRaw } from '../../api/index.js';
|
|
2
|
+
import { requireGroup, storeFor } from '../../store/index.js';
|
|
3
|
+
/** Handles Slack `message_deleted`. The store logs the event in the archive's own transaction, so a crash cannot leave a retry
|
|
4
|
+
* answering `not_found` where `duplicate` is due. */
|
|
5
|
+
export async function handleMessageDeleted(ctx, input) {
|
|
6
|
+
const events = requireGroup(storeFor(ctx), 'connectorEvents');
|
|
7
|
+
const event = { connector: 'slack', eventId: input.eventId };
|
|
8
|
+
// The tenant in the lookup is load-bearing: without it a deletion event from
|
|
9
|
+
// tenant A could archive tenant B's raw row sharing the same artifact_ref.
|
|
10
|
+
const target = await events.deletionTarget({
|
|
11
|
+
event,
|
|
12
|
+
artifactRef: `slack://${input.teamId}/${input.channelId}/${input.deletedTs}`,
|
|
13
|
+
tenantId: ctx.tenantId,
|
|
14
|
+
});
|
|
15
|
+
if (target.seen)
|
|
16
|
+
return { status: 'duplicate', memoryId: null };
|
|
17
|
+
const memoryId = target.memoryId;
|
|
31
18
|
if (!memoryId) {
|
|
32
|
-
// No row to archive
|
|
33
|
-
|
|
34
|
-
// pattern is fine for this branch.
|
|
35
|
-
const db2 = openHippoDb(ctx.hippoRoot);
|
|
36
|
-
try {
|
|
37
|
-
markEventSeen(db2, input.eventId, null);
|
|
38
|
-
}
|
|
39
|
-
finally {
|
|
40
|
-
closeHippoDb(db2);
|
|
41
|
-
}
|
|
19
|
+
// No row to archive: the event is still marked seen, so a retry answers 'duplicate'.
|
|
20
|
+
await events.markEventSeen(event);
|
|
42
21
|
return { status: 'not_found', memoryId: null };
|
|
43
22
|
}
|
|
44
|
-
|
|
45
|
-
// receives the same db handle the archive is using, so the INSERT lives
|
|
46
|
-
// inside the SAVEPOINT.
|
|
47
|
-
archiveRaw(ctx, memoryId, `source_deleted:slack:${input.teamId}:${input.channelId}:${input.deletedTs}`, {
|
|
48
|
-
afterArchive: (sameDb, archivedId) => {
|
|
49
|
-
markEventSeen(sameDb, input.eventId, archivedId);
|
|
50
|
-
},
|
|
51
|
-
});
|
|
23
|
+
await archiveRaw(ctx, memoryId, `source_deleted:slack:${input.teamId}:${input.channelId}:${input.deletedTs}`, { event });
|
|
52
24
|
return { status: 'archived', memoryId };
|
|
53
25
|
}
|
|
54
26
|
//# sourceMappingURL=deletion.js.map
|
|
@@ -1,44 +1,9 @@
|
|
|
1
|
-
import type
|
|
2
|
-
import { type
|
|
3
|
-
|
|
4
|
-
export
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
teamId: string | null;
|
|
8
|
-
rawPayload: string;
|
|
9
|
-
error: string;
|
|
10
|
-
receivedAt: string;
|
|
11
|
-
retriedAt: string | null;
|
|
12
|
-
bucket: DlqBucket | string;
|
|
13
|
-
retryCount: number;
|
|
14
|
-
signature: string | null;
|
|
15
|
-
slackTimestamp: string | null;
|
|
16
|
-
}
|
|
17
|
-
/**
|
|
18
|
-
* writeToDlq is bucket-aware. `bucket` defaults to
|
|
19
|
-
* 'parse_error' to preserve the legacy single-arg call sites while letting
|
|
20
|
-
* new callers tag rows for `hippo slack dlq replay` triage.
|
|
21
|
-
*
|
|
22
|
-
* `tenantId: null` means "no tenant resolved" (unroutable team). Stored as
|
|
23
|
-
* the sentinel '__unroutable__' so the column stays NOT NULL — a mismatch
|
|
24
|
-
* the listing CLI surfaces explicitly.
|
|
25
|
-
*/
|
|
26
|
-
export interface WriteDlqOpts {
|
|
27
|
-
tenantId: string | null;
|
|
28
|
-
rawPayload: string;
|
|
29
|
-
error: string;
|
|
30
|
-
bucket?: DlqBucket;
|
|
31
|
-
teamId?: string | null;
|
|
32
|
-
signature?: string | null;
|
|
33
|
-
slackTimestamp?: string | null;
|
|
34
|
-
}
|
|
35
|
-
export declare function writeToDlq(db: DatabaseSyncLike, opts: WriteDlqOpts): number;
|
|
36
|
-
export declare function listDlq(db: DatabaseSyncLike, opts: {
|
|
37
|
-
tenantId: string;
|
|
38
|
-
limit?: number;
|
|
39
|
-
}): DlqItem[];
|
|
40
|
-
export declare function getDlqEntry(db: DatabaseSyncLike, id: number): DlqItem | null;
|
|
41
|
-
export declare function markDlqRetried(db: DatabaseSyncLike, id: number): void;
|
|
1
|
+
import { type Context } from '../../api/index.js';
|
|
2
|
+
import { type DlqBucket, type DlqItem, type SlackDlqInsert } from '../../store/connectors/slack.js';
|
|
3
|
+
import { type ConnectorDlq, type ReplayResult } from '../dlq.js';
|
|
4
|
+
export type { DlqBucket, DlqItem };
|
|
5
|
+
/** Slack's dead-letter table; `teamId` and `slackTimestamp` are the columns only it has. */
|
|
6
|
+
export declare const slackDlq: ConnectorDlq<Pick<SlackDlqInsert, 'teamId' | 'slackTimestamp'>, DlqBucket, DlqItem>;
|
|
42
7
|
export interface ReplayDlqOpts {
|
|
43
8
|
/** Skip signature verification when the row's signature/timestamp are missing or stale. */
|
|
44
9
|
force?: boolean;
|
|
@@ -49,13 +14,6 @@ export interface ReplayDlqOpts {
|
|
|
49
14
|
/** Skew window override for tests. */
|
|
50
15
|
skewSeconds?: number;
|
|
51
16
|
}
|
|
52
|
-
export interface ReplayDlqResult {
|
|
53
|
-
ok: boolean;
|
|
54
|
-
status: string;
|
|
55
|
-
memoryId: string | null;
|
|
56
|
-
retryCount: number;
|
|
57
|
-
reason?: string;
|
|
58
|
-
}
|
|
59
17
|
/**
|
|
60
18
|
* Replay a DLQ row through the normal ingest path. Used by `hippo slack dlq
|
|
61
19
|
* replay <id> [--force]`.
|
|
@@ -75,5 +33,5 @@ export interface ReplayDlqResult {
|
|
|
75
33
|
* envelope was DLQed. That is intentional: the DLQ exists to be drained after
|
|
76
34
|
* the operator fixed the routing.
|
|
77
35
|
*/
|
|
78
|
-
export declare function replayDlqEntry(ctx: Pick<Context, 'hippoRoot'>, id: number, opts?: ReplayDlqOpts):
|
|
36
|
+
export declare function replayDlqEntry(ctx: Pick<Context, 'hippoRoot'>, id: number, opts?: ReplayDlqOpts): Promise<ReplayResult>;
|
|
79
37
|
//# sourceMappingURL=dlq.d.ts.map
|