hippo-memory 1.69.0 → 1.71.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +5 -2
- package/dist/agent-memories/apply.d.ts +3 -3
- package/dist/agent-memories/apply.js +16 -31
- package/dist/agent-memories/claude-code.d.ts +5 -5
- package/dist/agent-memories/claude-code.js +25 -12
- package/dist/agent-memories/copilot.js +3 -2
- package/dist/agent-memories/files.js +26 -14
- package/dist/agent-memories/gemini.js +6 -5
- package/dist/agent-memories/keys.js +3 -2
- package/dist/agent-memories/legacy.d.ts +2 -2
- package/dist/agent-memories/legacy.js +2 -2
- package/dist/agent-memories/markdown.d.ts +1 -3
- package/dist/agent-memories/markdown.js +1 -3
- package/dist/agent-memories/report.d.ts +1 -1
- package/dist/agent-memories/report.js +3 -2
- package/dist/agent-memories/source.d.ts +1 -1
- package/dist/agent-memories/source.js +6 -5
- package/dist/agent-memories/sync.d.ts +5 -3
- package/dist/agent-memories/sync.js +34 -38
- package/dist/agent-memories/types.d.ts +1 -1
- package/dist/api/assemble.d.ts +9 -46
- package/dist/api/assemble.js +44 -54
- package/dist/api/audit.d.ts +8 -7
- package/dist/api/audit.js +15 -21
- package/dist/api/auth.d.ts +17 -39
- package/dist/api/auth.js +76 -216
- package/dist/api/auto-sleep.d.ts +13 -0
- package/dist/api/auto-sleep.js +32 -0
- package/dist/{availability.d.ts → api/availability.d.ts} +4 -17
- package/dist/{availability.js → api/availability.js} +14 -44
- package/dist/{context-auto.js → api/context-auto.js} +2 -1
- package/dist/{context-render.d.ts → api/context-render.d.ts} +4 -4
- package/dist/{context-render.js → api/context-render.js} +7 -6
- package/dist/api/context-select.d.ts +5 -5
- package/dist/api/context-select.js +39 -48
- package/dist/api/context-types.d.ts +15 -40
- package/dist/api/context.d.ts +7 -26
- package/dist/api/context.js +67 -97
- package/dist/api/dormant.d.ts +7 -23
- package/dist/api/dormant.js +40 -128
- package/dist/api/drill-down.d.ts +9 -48
- package/dist/api/drill-down.js +41 -90
- package/dist/api/forget.d.ts +5 -33
- package/dist/api/forget.js +17 -73
- package/dist/api/goals.d.ts +1 -1
- package/dist/api/goals.js +2 -2
- package/dist/api/graph.d.ts +8 -0
- package/dist/api/graph.js +7 -0
- package/dist/api/index.d.ts +28 -0
- package/dist/api/index.js +31 -0
- package/dist/api/instruction-detect.js +85 -0
- package/dist/api/learn.js +63 -55
- package/dist/api/ledger-db.d.ts +21 -0
- package/dist/api/ledger-db.js +81 -0
- package/dist/api/memories.d.ts +5 -0
- package/dist/api/memories.js +7 -0
- package/dist/api/objects.d.ts +9 -0
- package/dist/api/objects.js +11 -0
- package/dist/api/on-store.d.ts +16 -0
- package/dist/api/on-store.js +38 -0
- package/dist/api/outcome.d.ts +5 -42
- package/dist/api/outcome.js +15 -80
- package/dist/{pilot-arm.d.ts → api/pilot-arm.d.ts} +1 -1
- package/dist/{pilot-arm.js → api/pilot-arm.js} +15 -23
- package/dist/api/predictions.d.ts +9 -0
- package/dist/api/predictions.js +18 -0
- package/dist/api/promote.d.ts +16 -31
- package/dist/api/promote.js +38 -123
- package/dist/{prompt-hook.d.ts → api/prompt-hook.d.ts} +11 -11
- package/dist/{prompt-hook.js → api/prompt-hook.js} +42 -60
- package/dist/api/quarantine.d.ts +5 -5
- package/dist/api/quarantine.js +30 -106
- package/dist/api/recall-cli.d.ts +55 -0
- package/dist/api/recall-cli.js +94 -0
- package/dist/api/recall-core.d.ts +4 -0
- package/dist/api/recall-core.js +120 -0
- package/dist/api/recall-finish.d.ts +53 -0
- package/dist/api/recall-finish.js +30 -0
- package/dist/api/recall-history.d.ts +64 -0
- package/dist/api/recall-history.js +159 -0
- package/dist/{recall-pipeline.d.ts → api/recall-pipeline.d.ts} +7 -8
- package/dist/{recall-pipeline.js → api/recall-pipeline.js} +60 -48
- package/dist/api/recall-record.d.ts +10 -13
- package/dist/api/recall-record.js +10 -30
- package/dist/api/recall-request.d.ts +2 -2
- package/dist/api/recall-request.js +3 -3
- package/dist/api/recall-types.d.ts +101 -316
- package/dist/api/recall.d.ts +5 -33
- package/dist/api/recall.js +92 -91
- package/dist/api/refine.d.ts +7 -0
- package/dist/api/refine.js +10 -0
- package/dist/api/remember-local.d.ts +57 -0
- package/dist/api/remember-local.js +90 -0
- package/dist/api/remember.d.ts +27 -12
- package/dist/api/remember.js +42 -46
- package/dist/api/session-owners.d.ts +4 -0
- package/dist/api/session-owners.js +17 -0
- package/dist/api/sleep-run.d.ts +7 -9
- package/dist/api/sleep-run.js +78 -94
- package/dist/api/sleep.d.ts +10 -29
- package/dist/api/tokens.d.ts +5 -12
- package/dist/api/tokens.js +12 -31
- package/dist/api/types.d.ts +8 -31
- package/dist/api/types.js +5 -23
- package/dist/capture/caller-session.d.ts +2 -2
- package/dist/capture/caller-session.js +8 -8
- package/dist/{capture-error.d.ts → capture/capture-error.d.ts} +2 -2
- package/dist/{capture-error.js → capture/capture-error.js} +7 -7
- package/dist/{codex-patch.js → capture/codex-patch.js} +1 -1
- package/dist/capture/command.d.ts +5 -13
- package/dist/capture/command.js +57 -60
- package/dist/capture/compact-resume-caller.d.ts +1 -1
- package/dist/capture/compact-resume-caller.js +7 -7
- package/dist/capture/compact.d.ts +8 -16
- package/dist/capture/compact.js +56 -47
- package/dist/capture/compaction-items-caller.d.ts +1 -1
- package/dist/capture/compaction-items-caller.js +7 -5
- package/dist/{compaction-items.js → capture/compaction-items.js} +27 -3
- package/dist/{compaction-record.d.ts → capture/compaction-record.d.ts} +10 -6
- package/dist/{compaction-record.js → capture/compaction-record.js} +143 -157
- package/dist/{compaction-spool.d.ts → capture/compaction-spool.d.ts} +1 -1
- package/dist/{compaction-spool.js → capture/compaction-spool.js} +18 -14
- package/dist/capture/copilot-transcript.js +1 -1
- package/dist/capture/extract.js +2 -2
- package/dist/capture/failure-caller.d.ts +2 -2
- package/dist/capture/failure-caller.js +6 -6
- package/dist/capture/failure-reading.d.ts +2 -5
- package/dist/capture/failure-reading.js +11 -12
- package/dist/{handoff-evidence.d.ts → capture/handoff-evidence.d.ts} +1 -1
- package/dist/{handoff-evidence.js → capture/handoff-evidence.js} +2 -1
- package/dist/capture/pre-compact-caller.d.ts +1 -1
- package/dist/capture/pre-compact-caller.js +2 -2
- package/dist/{session-digest.d.ts → capture/session-digest.d.ts} +2 -6
- package/dist/{session-digest.js → capture/session-digest.js} +29 -29
- package/dist/capture/session-end-caller.d.ts +2 -2
- package/dist/capture/session-end-caller.js +1 -1
- package/dist/capture/session-texts.d.ts +1 -1
- package/dist/capture/session-texts.js +5 -5
- package/dist/capture/session-worker.js +6 -4
- package/dist/{share-scrub.js → capture/share-scrub.js} +2 -2
- package/dist/capture/transcript.d.ts +2 -10
- package/dist/capture/transcript.js +72 -92
- package/dist/capture/working-state.d.ts +0 -3
- package/dist/capture/working-state.js +7 -7
- package/dist/cli/api-context.d.ts +3 -0
- package/dist/cli/api-context.js +6 -0
- package/dist/cli/audit-prune.d.ts +28 -0
- package/dist/cli/audit-prune.js +40 -0
- package/dist/cli/audit.d.ts +2 -2
- package/dist/cli/audit.js +92 -88
- package/dist/cli/auth.d.ts +2 -1
- package/dist/cli/auth.js +69 -53
- package/dist/cli/briefs.d.ts +4 -3
- package/dist/cli/briefs.js +76 -202
- package/dist/cli/card.d.ts +2 -1
- package/dist/cli/card.js +55 -54
- package/dist/cli/client.d.ts +28 -0
- package/dist/{client.js → cli/client.js} +25 -44
- package/dist/cli/compact-resume-payload.d.ts +8 -0
- package/dist/cli/compact-resume-payload.js +40 -0
- package/dist/cli/context.d.ts +1 -13
- package/dist/cli/context.js +51 -77
- package/dist/cli/continuity.d.ts +6 -5
- package/dist/cli/continuity.js +153 -145
- package/dist/cli/correction-latency.d.ts +24 -0
- package/dist/{correction-latency.js → cli/correction-latency.js} +2 -14
- package/dist/cli/curate.d.ts +13 -17
- package/dist/cli/curate.js +226 -222
- package/dist/cli/dag.d.ts +4 -4
- package/dist/cli/dag.js +70 -52
- package/dist/cli/decisions.d.ts +4 -3
- package/dist/cli/decisions.js +129 -253
- package/dist/cli/eval.d.ts +1 -3
- package/dist/cli/eval.js +56 -42
- package/dist/cli/exit.d.ts +6 -0
- package/dist/cli/exit.js +11 -0
- package/dist/cli/explain.d.ts +1 -2
- package/dist/cli/explain.js +39 -21
- package/dist/cli/flag-values.d.ts +30 -0
- package/dist/cli/flag-values.js +120 -0
- package/dist/cli/flags.d.ts +304 -0
- package/dist/cli/flags.js +169 -0
- package/dist/cli/github.d.ts +14 -0
- package/dist/cli/github.js +184 -0
- package/dist/cli/goals.d.ts +2 -1
- package/dist/cli/goals.js +76 -75
- package/dist/cli/hook-runtime.d.ts +31 -0
- package/dist/cli/hook-runtime.js +139 -0
- package/dist/cli/init.d.ts +2 -1
- package/dist/cli/init.js +153 -126
- package/dist/cli/install-steps.d.ts +7 -0
- package/dist/cli/install-steps.js +101 -0
- package/dist/cli/last-sleep.d.ts +3 -1
- package/dist/cli/last-sleep.js +12 -7
- package/dist/cli/maintenance.d.ts +5 -4
- package/dist/cli/maintenance.js +41 -42
- package/dist/cli/object-verbs.d.ts +40 -0
- package/dist/cli/object-verbs.js +66 -0
- package/dist/cli/owner-validation.d.ts +18 -0
- package/dist/cli/owner-validation.js +33 -0
- package/dist/cli/playbooks.d.ts +4 -3
- package/dist/cli/playbooks.js +98 -306
- package/dist/cli/print.d.ts +15 -0
- package/dist/cli/print.js +82 -0
- package/dist/cli/projects.d.ts +2 -3
- package/dist/cli/projects.js +56 -51
- package/dist/cli/provenance-coverage.d.ts +14 -0
- package/dist/{provenance-coverage.js → cli/provenance-coverage.js} +2 -6
- package/dist/cli/quality-repair-once.js +4 -4
- package/dist/cli/recall.d.ts +2 -6
- package/dist/cli/recall.js +128 -253
- package/dist/cli/refine-llm.d.ts +35 -0
- package/dist/cli/refine-llm.js +128 -0
- package/dist/cli/remember.d.ts +4 -6
- package/dist/cli/remember.js +193 -230
- package/dist/{scheduler.d.ts → cli/scheduler.d.ts} +4 -17
- package/dist/{scheduler.js → cli/scheduler.js} +22 -22
- package/dist/cli/serve.d.ts +1 -1
- package/dist/cli/serve.js +46 -7
- package/dist/cli/session-hooks.d.ts +11 -19
- package/dist/cli/session-hooks.js +263 -258
- package/dist/cli/setup.d.ts +4 -3
- package/dist/cli/setup.js +55 -37
- package/dist/cli/shared.d.ts +14 -118
- package/dist/cli/shared.js +26 -400
- package/dist/cli/slack.d.ts +2 -1
- package/dist/cli/slack.js +46 -74
- package/dist/cli/sleep-render.d.ts +4 -0
- package/dist/cli/sleep-render.js +61 -0
- package/dist/cli/sleep.d.ts +3 -8
- package/dist/cli/sleep.js +34 -91
- package/dist/cli/status.d.ts +9 -12
- package/dist/cli/status.js +86 -131
- package/dist/{stdin.d.ts → cli/stdin.d.ts} +4 -6
- package/dist/{stdin.js → cli/stdin.js} +8 -9
- package/dist/cli/transfer.d.ts +9 -9
- package/dist/cli/transfer.js +125 -122
- package/dist/cli/usage.js +13 -5
- package/dist/cli.d.ts +69 -167
- package/dist/cli.js +187 -296
- package/dist/connectors/dlq.d.ts +44 -0
- package/dist/connectors/dlq.js +30 -0
- package/dist/connectors/github/backfill.d.ts +6 -26
- package/dist/connectors/github/backfill.js +42 -114
- package/dist/connectors/github/deletion.d.ts +6 -21
- package/dist/connectors/github/deletion.js +17 -64
- package/dist/connectors/github/dlq.d.ts +12 -91
- package/dist/connectors/github/dlq.js +23 -140
- package/dist/connectors/github/ingest.d.ts +4 -37
- package/dist/connectors/github/ingest.js +24 -93
- package/dist/connectors/github/octokit-client.d.ts +5 -17
- package/dist/connectors/github/octokit-client.js +29 -25
- package/dist/connectors/github/ratelimit.d.ts +3 -14
- package/dist/connectors/github/ratelimit.js +3 -14
- package/dist/connectors/github/scope.d.ts +3 -5
- package/dist/connectors/github/scope.js +3 -5
- package/dist/connectors/github/signature.d.ts +4 -26
- package/dist/connectors/github/signature.js +4 -26
- package/dist/connectors/github/tenant-routing.d.ts +4 -26
- package/dist/connectors/github/tenant-routing.js +13 -61
- package/dist/connectors/github/transform.d.ts +1 -1
- package/dist/connectors/github/transform.js +2 -16
- package/dist/connectors/github/types.d.ts +4 -16
- package/dist/connectors/github/types.js +17 -27
- package/dist/connectors/github/webhook.d.ts +5 -18
- package/dist/connectors/github/webhook.js +86 -105
- package/dist/connectors/slack/backfill.d.ts +5 -18
- package/dist/connectors/slack/backfill.js +9 -42
- package/dist/connectors/slack/deletion.d.ts +4 -7
- package/dist/connectors/slack/deletion.js +20 -49
- package/dist/connectors/slack/dlq.d.ts +9 -68
- package/dist/connectors/slack/dlq.js +26 -136
- package/dist/connectors/slack/ingest.d.ts +4 -18
- package/dist/connectors/slack/ingest.js +26 -91
- package/dist/connectors/slack/scope.d.ts +2 -8
- package/dist/connectors/slack/scope.js +2 -8
- package/dist/connectors/slack/signature.d.ts +1 -6
- package/dist/connectors/slack/signature.js +2 -1
- package/dist/connectors/slack/tenant-routing.d.ts +4 -18
- package/dist/connectors/slack/tenant-routing.js +11 -31
- package/dist/connectors/slack/transform.d.ts +3 -19
- package/dist/connectors/slack/transform.js +2 -18
- package/dist/connectors/slack/types.d.ts +4 -10
- package/dist/connectors/slack/types.js +5 -16
- package/dist/connectors/slack/web-client.js +34 -28
- package/dist/connectors/slack/webhook.d.ts +5 -21
- package/dist/connectors/slack/webhook.js +80 -108
- package/dist/connectors/slack/workspaces.d.ts +8 -41
- package/dist/connectors/slack/workspaces.js +8 -58
- package/dist/consolidate/conflicts.d.ts +1 -1
- package/dist/consolidate/conflicts.js +10 -18
- package/dist/consolidate/dag-summary.d.ts +8 -0
- package/dist/consolidate/dag-summary.js +41 -0
- package/dist/{dag.d.ts → consolidate/dag.d.ts} +6 -29
- package/dist/{dag.js → consolidate/dag.js} +49 -131
- package/dist/consolidate/decay.d.ts +2 -2
- package/dist/consolidate/decay.js +35 -41
- package/dist/consolidate/dedupe.d.ts +29 -0
- package/dist/consolidate/dedupe.js +103 -0
- package/dist/consolidate/flush-units.d.ts +5 -6
- package/dist/consolidate/flush-units.js +3 -3
- package/dist/consolidate/half-life-migration.d.ts +34 -0
- package/dist/consolidate/half-life-migration.js +89 -0
- package/dist/consolidate/llm-passes.js +12 -29
- package/dist/consolidate/memory-value-weights.d.ts +8 -0
- package/dist/{memory-value-weights.js → consolidate/memory-value-weights.js} +2 -13
- package/dist/consolidate/memory-value.d.ts +45 -0
- package/dist/consolidate/memory-value.js +164 -0
- package/dist/consolidate/merge.js +65 -83
- package/dist/{merged-row.d.ts → consolidate/merged-row.d.ts} +1 -1
- package/dist/{merged-row.js → consolidate/merged-row.js} +4 -3
- package/dist/consolidate/physics-pass.js +46 -48
- package/dist/consolidate/replay.d.ts +9 -0
- package/dist/consolidate/replay.js +84 -0
- package/dist/consolidate/run.d.ts +7 -13
- package/dist/consolidate/run.js +6 -37
- package/dist/consolidate/sleep.d.ts +2 -9
- package/dist/consolidate/sleep.js +69 -151
- package/dist/consolidate/trace.d.ts +19 -0
- package/dist/{trace.js → consolidate/trace.js} +7 -24
- package/dist/consolidate/traces.js +40 -51
- package/dist/core/ablation.d.ts +15 -0
- package/dist/core/ablation.js +49 -0
- package/dist/{agent-memories/tools.d.ts → core/agent-memory-tools.d.ts} +1 -1
- package/dist/{agent-memories/tools.js → core/agent-memory-tools.js} +1 -1
- package/dist/{ambient.d.ts → core/ambient.d.ts} +1 -8
- package/dist/{ambient.js → core/ambient.js} +13 -18
- package/dist/{capture-contract.d.ts → core/capture-contract.d.ts} +16 -3
- package/dist/{capture-contract.js → core/capture-contract.js} +67 -1
- package/dist/{card.d.ts → core/card.d.ts} +4 -1
- package/dist/{card.js → core/card.js} +8 -0
- package/dist/core/compare.d.ts +32 -0
- package/dist/core/compare.js +70 -0
- package/dist/{config.d.ts → core/config.d.ts} +14 -28
- package/dist/{config.js → core/config.js} +101 -75
- package/dist/{handoff.d.ts → core/handoff.d.ts} +1 -7
- package/dist/core/handoff.js +81 -0
- package/dist/{memory-quality.js → core/memory-quality.js} +2 -2
- package/dist/core/memory.d.ts +183 -0
- package/dist/core/memory.js +380 -0
- package/dist/core/package-root.d.ts +3 -0
- package/dist/core/package-root.js +5 -0
- package/dist/{physics-config.d.ts → core/physics-config.d.ts} +1 -4
- package/dist/{physics-config.js → core/physics-config.js} +3 -8
- package/dist/{physics.d.ts → core/physics.d.ts} +16 -62
- package/dist/{physics.js → core/physics.js} +60 -122
- package/dist/{project-identity.d.ts → core/project-identity.d.ts} +17 -63
- package/dist/{project-identity.js → core/project-identity.js} +22 -55
- package/dist/{project-remote.js → core/project-remote.js} +17 -6
- package/dist/{prompt-recall.js → core/prompt-recall.js} +1 -1
- package/dist/core/raw-append-only.d.ts +5 -0
- package/dist/core/raw-append-only.js +7 -0
- package/dist/{salience.d.ts → core/salience.d.ts} +1 -7
- package/dist/{salience.js → core/salience.js} +36 -27
- package/dist/{search/types.d.ts → core/search-types.d.ts} +2 -2
- package/dist/{search/types.js → core/search-types.js} +1 -1
- package/dist/core/session-digest-row.d.ts +5 -0
- package/dist/core/session-digest-row.js +6 -0
- package/dist/{dashboard-actions.d.ts → dashboard/dashboard-actions.d.ts} +1 -1
- package/dist/{dashboard-actions.js → dashboard/dashboard-actions.js} +7 -7
- package/dist/{dashboard-queries.d.ts → dashboard/dashboard-queries.d.ts} +7 -2
- package/dist/{dashboard-queries.js → dashboard/dashboard-queries.js} +6 -10
- package/dist/{dashboard-snapshot.d.ts → dashboard/dashboard-snapshot.d.ts} +11 -10
- package/dist/{dashboard-snapshot.js → dashboard/dashboard-snapshot.js} +110 -104
- package/dist/{dashboard-types.d.ts → dashboard/dashboard-types.d.ts} +2 -1
- package/dist/{dashboard.d.ts → dashboard/dashboard.d.ts} +1 -0
- package/dist/{dashboard.js → dashboard/dashboard.js} +172 -55
- package/dist/db/backup.js +1 -1
- package/dist/db/busy.d.ts +19 -2
- package/dist/db/busy.js +88 -14
- package/dist/db/connect.d.ts +11 -2
- package/dist/db/connect.js +43 -10
- package/dist/db/index.d.ts +9 -0
- package/dist/db/index.js +8 -0
- package/dist/db/meta.d.ts +4 -0
- package/dist/db/meta.js +11 -1
- package/dist/db/migrate.d.ts +8 -1
- package/dist/db/migrate.js +28 -33
- package/dist/db/migrations/types.d.ts +2 -5
- package/dist/db/migrations/v08.js +1 -1
- package/dist/db/migrations/v14.js +39 -36
- package/dist/db/migrations/v15.js +2 -8
- package/dist/db/migrations/v16.js +31 -29
- package/dist/db/migrations/v17.js +2 -3
- package/dist/db/migrations/v18.js +6 -5
- package/dist/db/migrations/v19.js +2 -5
- package/dist/db/migrations/v20.js +5 -8
- package/dist/db/migrations/v22.js +28 -38
- package/dist/db/migrations/v23.js +3 -14
- package/dist/db/migrations/v24.js +25 -22
- package/dist/db/migrations/v25.js +3 -8
- package/dist/db/migrations/v26.js +2 -13
- package/dist/db/migrations/v27.js +3 -11
- package/dist/db/migrations/v28.js +2 -14
- package/dist/db/migrations/v29.js +23 -32
- package/dist/db/migrations/v30.js +4 -16
- package/dist/db/migrations/v31.js +23 -31
- package/dist/db/migrations/v32.js +4 -22
- package/dist/db/migrations/v33.js +2 -15
- package/dist/db/migrations/v34.js +2 -11
- package/dist/db/migrations/v35.js +2 -11
- package/dist/db/migrations/v36.js +2 -11
- package/dist/db/migrations/v37.js +8 -33
- package/dist/db/migrations/v38.js +5 -38
- package/dist/db/migrations/v39.js +10 -21
- package/dist/db/migrations/v40.js +8 -14
- package/dist/db/migrations/v41.js +2 -24
- package/dist/db/migrations/v43.js +7 -6
- package/dist/db/migrations/v44.js +2 -8
- package/dist/db/migrations/v45.js +2 -7
- package/dist/db/migrations/v46.js +1 -1
- package/dist/db/migrations/v47.js +2 -3
- package/dist/db/migrations/v48.js +1 -1
- package/dist/db/migrations/v49.js +1 -1
- package/dist/db/migrations/v50.js +8 -7
- package/dist/db/migrations/v51.js +1 -1
- package/dist/db/migrations/v52.js +1 -1
- package/dist/db/open.d.ts +11 -1
- package/dist/db/open.js +37 -4
- package/dist/db/physics-state.d.ts +23 -0
- package/dist/{physics-state.js → db/physics-state.js} +34 -52
- package/dist/db/raw-archive-mirror-cleanup.d.ts +5 -0
- package/dist/{raw-archive-mirror-cleanup.js → db/raw-archive-mirror-cleanup.js} +10 -20
- package/dist/db/request-stores.d.ts +15 -2
- package/dist/db/request-stores.js +37 -15
- package/dist/db/tables.d.ts +2 -0
- package/dist/db/tables.js +6 -0
- package/dist/{vector-store.d.ts → db/vector-store.d.ts} +6 -2
- package/dist/{vector-store.js → db/vector-store.js} +83 -51
- package/dist/db/wal-checkpointer.d.ts +11 -0
- package/dist/db/wal-checkpointer.js +92 -0
- package/dist/doctor.js +176 -152
- package/dist/entry/json-hooks.d.ts +1 -1
- package/dist/entry/json-hooks.js +1 -1
- package/dist/entry/project-identity.d.ts +1 -1
- package/dist/entry/project-identity.js +1 -1
- package/dist/entry/session-text.d.ts +3 -3
- package/dist/entry/session-text.js +5 -4
- package/dist/{eval-stats.d.ts → eval/eval-stats.d.ts} +15 -53
- package/dist/{eval-stats.js → eval/eval-stats.js} +24 -51
- package/dist/{eval-suite.d.ts → eval/eval-suite.d.ts} +3 -14
- package/dist/{eval-suite.js → eval/eval-suite.js} +99 -57
- package/dist/{eval.d.ts → eval/eval.d.ts} +7 -25
- package/dist/{eval.js → eval/eval.js} +35 -55
- package/dist/{judgment.d.ts → eval/judgment.d.ts} +1 -6
- package/dist/{judgment.js → eval/judgment.js} +23 -20
- package/dist/extensions/openclaw-plugin/index.js +2 -3
- package/dist/graph/delta.d.ts +3 -2
- package/dist/graph/delta.js +9 -23
- package/dist/{graph-extract.d.ts → graph/extract.d.ts} +10 -32
- package/dist/{graph-extract.js → graph/extract.js} +40 -81
- package/dist/{graph-recall.d.ts → graph/recall.d.ts} +9 -22
- package/dist/{graph-recall.js → graph/recall.js} +65 -108
- package/dist/graph/stream.d.ts +38 -0
- package/dist/{graph-stream.js → graph/stream.js} +20 -41
- package/dist/graph/view.d.ts +50 -0
- package/dist/graph/view.js +265 -0
- package/dist/graph/write.d.ts +4 -76
- package/dist/graph/write.js +13 -397
- package/dist/hooks/codex-session.js +1 -1
- package/dist/hooks/codex-wrapper.js +16 -17
- package/dist/hooks/copilot.d.ts +1 -8
- package/dist/hooks/copilot.js +16 -16
- package/dist/{cli → hooks}/hook-blocks.d.ts +6 -2
- package/dist/{cli → hooks}/hook-blocks.js +38 -125
- package/dist/hooks/json-hooks.d.ts +5 -37
- package/dist/hooks/json-hooks.js +49 -179
- package/dist/hooks/opencode.d.ts +0 -38
- package/dist/hooks/opencode.js +44 -103
- package/dist/hooks/shared.d.ts +8 -21
- package/dist/hooks/shared.js +30 -25
- package/dist/importers/core.d.ts +13 -42
- package/dist/importers/core.js +48 -64
- package/dist/importers/markdown-parse.d.ts +9 -32
- package/dist/importers/markdown-parse.js +10 -44
- package/dist/importers/markdown.js +5 -13
- package/dist/importers/sources.js +57 -81
- package/dist/importers/vault.d.ts +2 -8
- package/dist/importers/vault.js +95 -172
- package/dist/index.d.ts +26 -22
- package/dist/index.js +25 -21
- package/dist/learn/autolearn.d.ts +29 -0
- package/dist/{autolearn.js → learn/autolearn.js} +26 -51
- package/dist/{churn-git.d.ts → learn/churn-git.d.ts} +1 -1
- package/dist/{churn-git.js → learn/churn-git.js} +6 -4
- package/dist/{extract.d.ts → learn/extract.d.ts} +1 -1
- package/dist/learn/extract.js +123 -0
- package/dist/learn/forward-claim-detector.d.ts +12 -0
- package/dist/learn/forward-claim-detector.js +60 -0
- package/dist/{invalidation.d.ts → learn/invalidation.d.ts} +10 -18
- package/dist/{invalidation.js → learn/invalidation.js} +92 -125
- package/dist/mcp/admin-tools.d.ts +1 -1
- package/dist/mcp/admin-tools.js +39 -64
- package/dist/mcp/format.d.ts +5 -5
- package/dist/mcp/format.js +7 -6
- package/dist/mcp/framing.d.ts +6 -0
- package/dist/mcp/framing.js +11 -3
- package/dist/mcp/memory-tools.js +10 -35
- package/dist/mcp/protocol.d.ts +14 -36
- package/dist/mcp/protocol.js +10 -19
- package/dist/mcp/recall-tools.d.ts +2 -2
- package/dist/mcp/recall-tools.js +70 -52
- package/dist/mcp/request.d.ts +3 -11
- package/dist/mcp/request.js +71 -85
- package/dist/mcp/server.d.ts +3 -9
- package/dist/mcp/server.js +6 -17
- package/dist/mcp/session-state.d.ts +2 -3
- package/dist/mcp/session-state.js +7 -13
- package/dist/mcp/shared-gate.js +1 -1
- package/dist/mcp/stdio.d.ts +2 -6
- package/dist/mcp/stdio.js +112 -38
- package/dist/mcp/tool-args.js +2 -1
- package/dist/mcp/tools.js +7 -5
- package/dist/objects/customer-notes.d.ts +44 -0
- package/dist/objects/customer-notes.js +71 -0
- package/dist/objects/decisions.d.ts +41 -0
- package/dist/objects/decisions.js +63 -0
- package/dist/objects/descriptor.d.ts +52 -0
- package/dist/objects/descriptor.js +4 -0
- package/dist/objects/fields.d.ts +15 -0
- package/dist/objects/fields.js +21 -0
- package/dist/objects/incidents.d.ts +45 -0
- package/dist/objects/incidents.js +96 -0
- package/dist/objects/lifecycle.d.ts +27 -0
- package/dist/objects/lifecycle.js +96 -0
- package/dist/objects/policies.d.ts +60 -0
- package/dist/objects/policies.js +102 -0
- package/dist/objects/processes.d.ts +43 -0
- package/dist/objects/processes.js +92 -0
- package/dist/objects/project-briefs.d.ts +63 -0
- package/dist/objects/project-briefs.js +194 -0
- package/dist/objects/skills.d.ts +51 -0
- package/dist/objects/skills.js +110 -0
- package/dist/postinstall.js +10 -21
- package/dist/predictions/planning-fallacy.d.ts +14 -109
- package/dist/predictions/planning-fallacy.js +4 -129
- package/dist/rerankers/clef.d.ts +2 -6
- package/dist/rerankers/clef.js +28 -76
- package/dist/rerankers/cross-encoder.d.ts +0 -7
- package/dist/rerankers/cross-encoder.js +18 -28
- package/dist/rerankers/index.js +8 -7
- package/dist/rerankers/jev.d.ts +1 -4
- package/dist/rerankers/jev.js +36 -52
- package/dist/rerankers/llm.d.ts +2 -13
- package/dist/rerankers/llm.js +42 -59
- package/dist/rerankers/outage-warning.d.ts +8 -0
- package/dist/rerankers/outage-warning.js +32 -0
- package/dist/rerankers/remote.d.ts +4 -0
- package/dist/rerankers/remote.js +25 -0
- package/dist/rerankers/types.d.ts +3 -15
- package/dist/search/as-of.d.ts +1 -1
- package/dist/search/bm25-search.d.ts +2 -2
- package/dist/search/bm25-search.js +7 -7
- package/dist/search/bm25.d.ts +1 -1
- package/dist/search/bm25.js +1 -1
- package/dist/search/boosts.d.ts +5 -3
- package/dist/search/boosts.js +36 -15
- package/dist/search/breakdown.d.ts +2 -2
- package/dist/search/breakdown.js +2 -1
- package/dist/search/explain.d.ts +1 -1
- package/dist/search/explain.js +3 -2
- package/dist/search/finalize.d.ts +2 -2
- package/dist/search/finalize.js +4 -3
- package/dist/search/fusion.d.ts +1 -1
- package/dist/search/fusion.js +3 -3
- package/dist/search/goal-boost.d.ts +23 -0
- package/dist/search/goal-boost.js +90 -0
- package/dist/search/hybrid-score.d.ts +2 -2
- package/dist/search/hybrid-score.js +1 -1
- package/dist/search/hybrid.d.ts +6 -4
- package/dist/search/hybrid.js +11 -8
- package/dist/{multihop.d.ts → search/multihop.d.ts} +2 -2
- package/dist/{multihop.js → search/multihop.js} +9 -8
- package/dist/search/path-context.d.ts +11 -0
- package/dist/{path-context.js → search/path-context.js} +8 -19
- package/dist/search/physics-search.d.ts +4 -4
- package/dist/search/physics-search.js +25 -22
- package/dist/search/rerank.d.ts +3 -3
- package/dist/search/rerank.js +4 -3
- package/dist/search/rrf.d.ts +15 -0
- package/dist/search/rrf.js +36 -0
- package/dist/search/temporal.d.ts +1 -1
- package/dist/search/temporal.js +5 -2
- package/dist/search/vector.d.ts +10 -3
- package/dist/search/vector.js +51 -15
- package/dist/server/auth.d.ts +10 -29
- package/dist/server/auth.js +57 -42
- package/dist/server/boot.d.ts +5 -0
- package/dist/server/boot.js +432 -0
- package/dist/server/client-ip.d.ts +8 -20
- package/dist/server/client-ip.js +23 -34
- package/dist/server/cursor.d.ts +1 -1
- package/dist/server/cursor.js +2 -3
- package/dist/server/deadline.d.ts +13 -0
- package/dist/server/deadline.js +45 -0
- package/dist/server/defaults.d.ts +3 -0
- package/dist/server/defaults.js +4 -0
- package/dist/server/key-check-bounds.d.ts +9 -0
- package/dist/server/key-check-bounds.js +46 -0
- package/dist/server/lifecycle.d.ts +5 -4
- package/dist/server/lifecycle.js +20 -5
- package/dist/server/mcp-http.d.ts +1 -4
- package/dist/server/mcp-http.js +44 -68
- package/dist/server/rate-limit.d.ts +21 -0
- package/dist/{rate-limit.js → server/rate-limit.js} +4 -13
- package/dist/server/ready.d.ts +7 -0
- package/dist/server/ready.js +38 -0
- package/dist/server/request.d.ts +14 -12
- package/dist/server/request.js +71 -28
- package/dist/server/route-table.d.ts +15 -0
- package/dist/server/route-table.js +202 -0
- package/dist/server/routes/admin.js +29 -30
- package/dist/server/routes/customer-notes.d.ts +5 -5
- package/dist/server/routes/customer-notes.js +35 -105
- package/dist/server/routes/decisions.d.ts +5 -5
- package/dist/server/routes/decisions.js +45 -115
- package/dist/server/routes/incidents.d.ts +5 -5
- package/dist/server/routes/incidents.js +44 -105
- package/dist/server/routes/memories.js +21 -43
- package/dist/server/routes/object-routes.d.ts +35 -0
- package/dist/server/routes/object-routes.js +72 -0
- package/dist/server/routes/policies.d.ts +6 -6
- package/dist/server/routes/policies.js +42 -134
- package/dist/server/routes/predictions.js +35 -63
- package/dist/server/routes/processes.d.ts +5 -5
- package/dist/server/routes/processes.js +44 -134
- package/dist/server/routes/project-briefs.d.ts +6 -6
- package/dist/server/routes/project-briefs.js +41 -120
- package/dist/server/routes/recall.js +21 -44
- package/dist/server/routes/skills.d.ts +6 -6
- package/dist/server/routes/skills.js +40 -138
- package/dist/server/server-detect.d.ts +28 -0
- package/dist/server/server-detect.js +156 -0
- package/dist/server/sleep-child.d.ts +2 -0
- package/dist/server/sleep-child.js +19 -0
- package/dist/server/sleep-offload.d.ts +20 -0
- package/dist/server/sleep-offload.js +73 -0
- package/dist/server/tls.d.ts +6 -0
- package/dist/server/tls.js +24 -0
- package/dist/server/types.d.ts +35 -14
- package/dist/server/validation.d.ts +6 -5
- package/dist/server/validation.js +16 -34
- package/dist/server.d.ts +39 -61
- package/dist/server.js +26 -569
- package/dist/sharing/global-store.d.ts +19 -0
- package/dist/sharing/global-store.js +75 -0
- package/dist/sharing/global-sync.d.ts +6 -0
- package/dist/sharing/global-sync.js +80 -0
- package/dist/{project-merge.d.ts → sharing/project-merge.d.ts} +5 -6
- package/dist/{project-merge.js → sharing/project-merge.js} +34 -51
- package/dist/sharing/scope.d.ts +7 -0
- package/dist/{scope.js → sharing/scope.js} +5 -12
- package/dist/sharing/search-both.d.ts +60 -0
- package/dist/sharing/search-both.js +138 -0
- package/dist/sharing/share.d.ts +38 -0
- package/dist/sharing/share.js +226 -0
- package/dist/{ambient-store.d.ts → store/ambient.d.ts} +2 -2
- package/dist/{ambient-store.js → store/ambient.js} +11 -16
- package/dist/store/audit-event.d.ts +15 -17
- package/dist/store/audit-event.js +9 -16
- package/dist/{audit.d.ts → store/audit.d.ts} +29 -8
- package/dist/{audit.js → store/audit.js} +95 -18
- package/dist/{auth.d.ts → store/auth.d.ts} +19 -36
- package/dist/{auth.js → store/auth.js} +108 -99
- package/dist/store/candidates.d.ts +41 -13
- package/dist/store/candidates.js +141 -60
- package/dist/{card-detail.d.ts → store/card-detail.d.ts} +5 -4
- package/dist/{card-detail.js → store/card-detail.js} +3 -2
- package/dist/{store-cards.d.ts → store/cards.d.ts} +26 -16
- package/dist/{store-cards.js → store/cards.js} +133 -248
- package/dist/store/compactions.d.ts +78 -0
- package/dist/store/compactions.js +93 -0
- package/dist/store/conflicts.d.ts +26 -26
- package/dist/store/conflicts.js +194 -222
- package/dist/store/connectors/github.d.ts +84 -0
- package/dist/store/connectors/github.js +180 -0
- package/dist/store/connectors/slack.d.ts +69 -0
- package/dist/store/connectors/slack.js +177 -0
- package/dist/store/dashboard-reads.d.ts +27 -0
- package/dist/store/dashboard-reads.js +88 -0
- package/dist/store/delete-and-batch.d.ts +27 -51
- package/dist/store/delete-and-batch.js +100 -92
- package/dist/{delivery-recorder.d.ts → store/delivery-recorder.d.ts} +16 -5
- package/dist/{delivery-recorder.js → store/delivery-recorder.js} +60 -38
- package/dist/store/descendant-page.d.ts +12 -0
- package/dist/store/descendant-page.js +99 -0
- package/dist/store/diagnostics.d.ts +47 -0
- package/dist/store/diagnostics.js +44 -0
- package/dist/store/doctor-reads.d.ts +16 -0
- package/dist/store/doctor-reads.js +19 -0
- package/dist/store/dormant.d.ts +105 -0
- package/dist/store/dormant.js +241 -0
- package/dist/store/embeddings/index.d.ts +36 -0
- package/dist/{embeddings.js → store/embeddings/index.js} +104 -224
- package/dist/{local-embedding.d.ts → store/embeddings/local.d.ts} +1 -1
- package/dist/{local-embedding.js → store/embeddings/local.js} +69 -75
- package/dist/store/embeddings/provider.d.ts +40 -0
- package/dist/{embedding-provider.js → store/embeddings/provider.js} +78 -91
- package/dist/store/entry-reads.d.ts +66 -63
- package/dist/store/entry-reads.js +159 -121
- package/dist/store/entry-row.d.ts +14 -37
- package/dist/store/entry-row.js +37 -45
- package/dist/store/entry-writes.d.ts +40 -17
- package/dist/store/entry-writes.js +105 -41
- package/dist/{failure-log.d.ts → store/failure-log.d.ts} +7 -2
- package/dist/{failure-log.js → store/failure-log.js} +9 -2
- package/dist/store/goals.d.ts +96 -0
- package/dist/store/goals.js +260 -0
- package/dist/store/graph-queue.d.ts +13 -0
- package/dist/store/graph-queue.js +70 -0
- package/dist/store/graph-reads.d.ts +41 -0
- package/dist/{graph/read.js → store/graph-reads.js} +72 -162
- package/dist/{graph/types.d.ts → store/graph-rows.d.ts} +71 -14
- package/dist/{graph/rows.js → store/graph-rows.js} +20 -12
- package/dist/store/graph-view-rows.d.ts +13 -0
- package/dist/store/graph-view-rows.js +68 -0
- package/dist/store/graph-writes.d.ts +33 -0
- package/dist/store/graph-writes.js +232 -0
- package/dist/store/half-life.d.ts +35 -0
- package/dist/store/half-life.js +75 -0
- package/dist/store/handoffs.d.ts +6 -12
- package/dist/store/handoffs.js +54 -63
- package/dist/store/index-and-stats.d.ts +14 -20
- package/dist/store/index-and-stats.js +74 -119
- package/dist/store/index.d.ts +4 -0
- package/dist/store/index.js +3 -0
- package/dist/store/key-audit.d.ts +2 -2
- package/dist/store/key-audit.js +4 -4
- package/dist/store/key-writes.d.ts +12 -5
- package/dist/store/key-writes.js +30 -4
- package/dist/store/ledger-turn.d.ts +17 -0
- package/dist/store/ledger-turn.js +27 -0
- package/dist/store/markdown.d.ts +3 -7
- package/dist/store/markdown.js +25 -23
- package/dist/store/mirrors.d.ts +7 -13
- package/dist/store/mirrors.js +52 -47
- package/dist/store/object-types.d.ts +189 -0
- package/dist/store/object-types.js +4 -0
- package/dist/store/open.d.ts +6 -4
- package/dist/store/open.js +30 -36
- package/dist/store/planning-fallacy-evidence.d.ts +14 -0
- package/dist/store/planning-fallacy-evidence.js +52 -0
- package/dist/store/port.d.ts +649 -0
- package/dist/store/port.js +17 -0
- package/dist/{predictions/store.d.ts → store/predictions.d.ts} +25 -52
- package/dist/{predictions/store.js → store/predictions.js} +88 -184
- package/dist/{quality-repair.js → store/quality-repair.js} +27 -57
- package/dist/{quarantine.d.ts → store/quarantine.d.ts} +8 -8
- package/dist/{quarantine.js → store/quarantine.js} +64 -22
- package/dist/store/raw-archive.d.ts +14 -0
- package/dist/{raw-archive.js → store/raw-archive.js} +20 -31
- package/dist/store/recall-scope.d.ts +78 -0
- package/dist/{recall-scope.js → store/recall-scope.js} +23 -84
- package/dist/{recall-trace.d.ts → store/recall-trace.d.ts} +13 -81
- package/dist/{recall-trace.js → store/recall-trace.js} +41 -122
- package/dist/store/rejected-values.d.ts +55 -0
- package/dist/store/rejected-values.js +150 -0
- package/dist/store/rejection.d.ts +54 -0
- package/dist/{rejection.js → store/rejection.js} +16 -67
- package/dist/store/report-reads.d.ts +6 -0
- package/dist/store/report-reads.js +29 -0
- package/dist/store/rows.d.ts +11 -22
- package/dist/store/rows.js +52 -43
- package/dist/store/rule-sql.d.ts +5 -0
- package/dist/store/rule-sql.js +37 -0
- package/dist/store/search-rows.d.ts +22 -42
- package/dist/store/search-rows.js +55 -78
- package/dist/store/sessions.d.ts +23 -49
- package/dist/store/sessions.js +96 -118
- package/dist/store/sqlite/commit-watch.d.ts +4 -0
- package/dist/store/sqlite/commit-watch.js +29 -0
- package/dist/store/sqlite/connector-events-group.d.ts +5 -0
- package/dist/store/sqlite/connector-events-group.js +50 -0
- package/dist/store/sqlite/connector-writes-group.d.ts +6 -0
- package/dist/store/sqlite/connector-writes-group.js +65 -0
- package/dist/store/sqlite/dag-reads-group.d.ts +3 -0
- package/dist/store/sqlite/dag-reads-group.js +45 -0
- package/dist/store/sqlite/entry-writes-group.d.ts +18 -0
- package/dist/store/{entry-writes-group.js → sqlite/entry-writes-group.js} +73 -60
- package/dist/store/sqlite/error-codec.d.ts +17 -0
- package/dist/store/sqlite/error-codec.js +61 -0
- package/dist/store/sqlite/executor-counts.d.ts +10 -0
- package/dist/store/sqlite/executor-counts.js +11 -0
- package/dist/store/sqlite/executor.d.ts +29 -0
- package/dist/store/sqlite/executor.js +287 -0
- package/dist/store/sqlite/graph-reads-group.d.ts +5 -0
- package/dist/store/sqlite/graph-reads-group.js +18 -0
- package/dist/store/sqlite/local.d.ts +21 -0
- package/dist/store/sqlite/local.js +39 -0
- package/dist/store/sqlite/object-rows.d.ts +102 -0
- package/dist/store/sqlite/object-rows.js +221 -0
- package/dist/store/sqlite/objects-group.d.ts +20 -0
- package/dist/store/sqlite/objects-group.js +316 -0
- package/dist/store/sqlite/predictions-group.d.ts +5 -0
- package/dist/store/sqlite/predictions-group.js +28 -0
- package/dist/store/sqlite/quarantine-group.d.ts +5 -0
- package/dist/store/sqlite/quarantine-group.js +38 -0
- package/dist/store/sqlite/store.d.ts +23 -0
- package/dist/store/sqlite/store.js +294 -0
- package/dist/store/sqlite/vector-pack.d.ts +18 -0
- package/dist/store/sqlite/vector-pack.js +46 -0
- package/dist/store/sqlite/vector-reads-group.d.ts +3 -0
- package/dist/store/sqlite/vector-reads-group.js +23 -0
- package/dist/store/sqlite/worker-entry.d.ts +2 -0
- package/dist/store/sqlite/worker-entry.js +8 -0
- package/dist/store/sqlite/worker-jobs.d.ts +5 -0
- package/dist/store/sqlite/worker-jobs.js +116 -0
- package/dist/store/sqlite/worker-ops.d.ts +135 -0
- package/dist/store/sqlite/worker-ops.js +93 -0
- package/dist/store/sqlite/worker-store.d.ts +8 -0
- package/dist/store/sqlite/worker-store.js +79 -0
- package/dist/store/summaries.d.ts +11 -72
- package/dist/store/summaries.js +47 -186
- package/dist/{summary-dirty.d.ts → store/summary-dirty.d.ts} +1 -1
- package/dist/{summary-dirty.js → store/summary-dirty.js} +1 -1
- package/dist/store/tenant-lookup.d.ts +6 -1
- package/dist/store/tenant-lookup.js +7 -0
- package/dist/store/tenant.d.ts +11 -0
- package/dist/store/tenant.js +28 -0
- package/dist/store/token-ledger-rows.d.ts +61 -0
- package/dist/store/token-ledger-rows.js +68 -0
- package/dist/{token-ledger.d.ts → store/token-ledger.d.ts} +14 -51
- package/dist/{token-ledger.js → store/token-ledger.js} +51 -129
- package/dist/store/tombstone-checks.d.ts +12 -0
- package/dist/store/tombstone-checks.js +31 -0
- package/dist/store/usage-reports.d.ts +7 -0
- package/dist/store/usage-reports.js +18 -0
- package/dist/store/vector-index.d.ts +46 -0
- package/dist/store/vector-index.js +170 -0
- package/dist/{working-memory.d.ts → store/working-memory.d.ts} +11 -26
- package/dist/store/working-memory.js +118 -0
- package/dist/{yaml.d.ts → store/yaml.d.ts} +1 -5
- package/dist/{yaml.js → store/yaml.js} +2 -6
- package/dist/support-bundle.d.ts +1 -1
- package/dist/support-bundle.js +19 -37
- package/dist/{gated-write.d.ts → trust/gated-write.d.ts} +2 -2
- package/dist/{gated-write.js → trust/gated-write.js} +6 -6
- package/dist/trust/quarantine.d.ts +4 -0
- package/dist/trust/quarantine.js +8 -0
- package/dist/trust/reject-flow.d.ts +23 -0
- package/dist/trust/reject-flow.js +65 -0
- package/dist/util/anthropic-messages.d.ts +31 -0
- package/dist/util/anthropic-messages.js +58 -0
- package/dist/util/atomic-write.d.ts +4 -0
- package/dist/util/atomic-write.js +138 -0
- package/dist/util/capped-json.d.ts +6 -0
- package/dist/util/capped-json.js +46 -0
- package/dist/util/crash-handlers.d.ts +12 -0
- package/dist/util/crash-handlers.js +72 -0
- package/dist/{env.d.ts → util/env.d.ts} +27 -7
- package/dist/{env.js → util/env.js} +33 -8
- package/dist/{home-path.d.ts → util/home-path.d.ts} +2 -1
- package/dist/util/home-path.js +69 -0
- package/dist/{http-retry.d.ts → util/http-retry.d.ts} +8 -2
- package/dist/util/http-retry.js +103 -0
- package/dist/{http-util.d.ts → util/http-util.d.ts} +14 -3
- package/dist/{http-util.js → util/http-util.js} +31 -11
- package/dist/util/json.d.ts +17 -0
- package/dist/util/json.js +25 -0
- package/dist/{log.d.ts → util/log.d.ts} +7 -3
- package/dist/{log.js → util/log.js} +36 -11
- package/dist/util/real-path.d.ts +3 -0
- package/dist/util/real-path.js +15 -0
- package/dist/util/request-scope.d.ts +28 -0
- package/dist/util/request-scope.js +48 -0
- package/dist/{same-text.d.ts → util/same-text.d.ts} +1 -1
- package/dist/{secret-detect.d.ts → util/secret-detect.d.ts} +5 -30
- package/dist/{secret-detect.js → util/secret-detect.js} +17 -42
- package/dist/util/stored-json.d.ts +9 -0
- package/dist/util/stored-json.js +8 -0
- package/dist/util/time.d.ts +2 -0
- package/dist/util/time.js +3 -0
- package/dist/util/token-text.d.ts +15 -0
- package/dist/util/token-text.js +20 -0
- package/dist/{transcript-tail.d.ts → util/transcript-tail.d.ts} +2 -0
- package/dist/util/transcript-tail.js +49 -0
- package/dist/util/version.d.ts +11 -0
- package/dist/util/version.js +26 -0
- package/extensions/openclaw-plugin/index.ts +2 -6
- package/extensions/openclaw-plugin/openclaw.plugin.json +1 -1
- package/extensions/openclaw-plugin/package.json +1 -1
- package/openclaw.plugin.json +1 -1
- package/package.json +2 -2
- package/dist/ablation.d.ts +0 -102
- package/dist/ablation.js +0 -136
- package/dist/api.d.ts +0 -26
- package/dist/api.js +0 -29
- package/dist/audit-prune.d.ts +0 -62
- package/dist/audit-prune.js +0 -107
- package/dist/autolearn.d.ts +0 -56
- package/dist/client.d.ts +0 -48
- package/dist/compare.d.ts +0 -86
- package/dist/compare.js +0 -117
- package/dist/connectors/github/cli-impl.d.ts +0 -25
- package/dist/connectors/github/cli-impl.js +0 -227
- package/dist/connectors/github/idempotency.d.ts +0 -19
- package/dist/connectors/github/idempotency.js +0 -27
- package/dist/connectors/slack/idempotency.d.ts +0 -17
- package/dist/connectors/slack/idempotency.js +0 -31
- package/dist/correction-latency.d.ts +0 -36
- package/dist/customer-notes.d.ts +0 -96
- package/dist/customer-notes.js +0 -336
- package/dist/db.d.ts +0 -9
- package/dist/db.js +0 -8
- package/dist/decisions.d.ts +0 -94
- package/dist/decisions.js +0 -326
- package/dist/dedupe.d.ts +0 -75
- package/dist/dedupe.js +0 -169
- package/dist/dormant.d.ts +0 -93
- package/dist/dormant.js +0 -137
- package/dist/embedding-provider.d.ts +0 -77
- package/dist/embeddings.d.ts +0 -101
- package/dist/extract.js +0 -133
- package/dist/forward-claim-detector.d.ts +0 -36
- package/dist/forward-claim-detector.js +0 -112
- package/dist/goals.d.ts +0 -173
- package/dist/goals.js +0 -448
- package/dist/graph/read.d.ts +0 -73
- package/dist/graph/rows.d.ts +0 -45
- package/dist/graph/types.js +0 -11
- package/dist/graph-stream.d.ts +0 -70
- package/dist/graph-view.d.ts +0 -73
- package/dist/graph-view.js +0 -333
- package/dist/half-life-migration.d.ts +0 -63
- package/dist/half-life-migration.js +0 -182
- package/dist/handoff.js +0 -68
- package/dist/home-path.js +0 -24
- package/dist/http-retry.js +0 -51
- package/dist/incidents.d.ts +0 -103
- package/dist/incidents.js +0 -349
- package/dist/instruction-detect.js +0 -27
- package/dist/json.d.ts +0 -7
- package/dist/json.js +0 -11
- package/dist/ledger-db.d.ts +0 -10
- package/dist/ledger-db.js +0 -42
- package/dist/memory-value-weights.d.ts +0 -19
- package/dist/memory-value.d.ts +0 -113
- package/dist/memory-value.js +0 -250
- package/dist/memory.d.ts +0 -294
- package/dist/memory.js +0 -522
- package/dist/owner-validation.d.ts +0 -42
- package/dist/owner-validation.js +0 -56
- package/dist/path-context.d.ts +0 -24
- package/dist/physics-state.d.ts +0 -39
- package/dist/policies.d.ts +0 -151
- package/dist/policies.js +0 -434
- package/dist/processes.d.ts +0 -108
- package/dist/processes.js +0 -371
- package/dist/project-briefs.d.ts +0 -128
- package/dist/project-briefs.js +0 -523
- package/dist/provenance-coverage.d.ts +0 -18
- package/dist/rate-limit.d.ts +0 -34
- package/dist/raw-archive-mirror-cleanup.d.ts +0 -20
- package/dist/raw-archive.d.ts +0 -24
- package/dist/recall-history.d.ts +0 -131
- package/dist/recall-history.js +0 -227
- package/dist/recall-scope.d.ts +0 -138
- package/dist/refine-llm.d.ts +0 -61
- package/dist/refine-llm.js +0 -167
- package/dist/reject-flow.d.ts +0 -69
- package/dist/reject-flow.js +0 -260
- package/dist/rejection.d.ts +0 -100
- package/dist/replay.d.ts +0 -41
- package/dist/replay.js +0 -122
- package/dist/rrf.d.ts +0 -43
- package/dist/rrf.js +0 -61
- package/dist/scope.d.ts +0 -14
- package/dist/server-detect.d.ts +0 -72
- package/dist/server-detect.js +0 -222
- package/dist/session-owners.d.ts +0 -7
- package/dist/session-owners.js +0 -54
- package/dist/shared.d.ts +0 -186
- package/dist/shared.js +0 -540
- package/dist/skills.d.ts +0 -101
- package/dist/skills.js +0 -367
- package/dist/store/entry-writes-group.d.ts +0 -9
- package/dist/store/vector-writes.d.ts +0 -6
- package/dist/store/vector-writes.js +0 -59
- package/dist/store-port.d.ts +0 -262
- package/dist/store-port.js +0 -178
- package/dist/tenant.d.ts +0 -25
- package/dist/tenant.js +0 -43
- package/dist/trace.d.ts +0 -34
- package/dist/transcript-tail.js +0 -48
- package/dist/version.d.ts +0 -26
- package/dist/version.js +0 -41
- package/dist/working-memory.js +0 -154
- /package/dist/{context-auto.d.ts → api/context-auto.d.ts} +0 -0
- /package/dist/{instruction-detect.d.ts → api/instruction-detect.d.ts} +0 -0
- /package/dist/{codex-patch.d.ts → capture/codex-patch.d.ts} +0 -0
- /package/dist/{compaction-items.d.ts → capture/compaction-items.d.ts} +0 -0
- /package/dist/{share-scrub.d.ts → capture/share-scrub.d.ts} +0 -0
- /package/dist/{overlap-index.d.ts → consolidate/overlap-index.d.ts} +0 -0
- /package/dist/{overlap-index.js → consolidate/overlap-index.js} +0 -0
- /package/dist/{api-errors.d.ts → core/api-errors.d.ts} +0 -0
- /package/dist/{api-errors.js → core/api-errors.js} +0 -0
- /package/dist/{memory-quality.d.ts → core/memory-quality.d.ts} +0 -0
- /package/dist/{project-remote.d.ts → core/project-remote.d.ts} +0 -0
- /package/dist/{prompt-recall.d.ts → core/prompt-recall.d.ts} +0 -0
- /package/dist/{dashboard-params.d.ts → dashboard/dashboard-params.d.ts} +0 -0
- /package/dist/{dashboard-params.js → dashboard/dashboard-params.js} +0 -0
- /package/dist/{dashboard-types.js → dashboard/dashboard-types.js} +0 -0
- /package/dist/{quality-repair.d.ts → store/quality-repair.d.ts} +0 -0
- /package/dist/{escape.d.ts → util/escape.d.ts} +0 -0
- /package/dist/{escape.js → util/escape.js} +0 -0
- /package/dist/{keyset.d.ts → util/keyset.d.ts} +0 -0
- /package/dist/{keyset.js → util/keyset.js} +0 -0
- /package/dist/{same-text.js → util/same-text.js} +0 -0
- /package/dist/{db → util}/sqlite-blocked.d.ts +0 -0
- /package/dist/{db → util}/sqlite-blocked.js +0 -0
- /package/dist/{tokenize.d.ts → util/tokenize.d.ts} +0 -0
- /package/dist/{tokenize.js → util/tokenize.js} +0 -0
- /package/dist/{write-budget.d.ts → util/write-budget.d.ts} +0 -0
- /package/dist/{write-budget.js → util/write-budget.js} +0 -0
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { type HippoStore } from '../store/index.js';
|
|
2
|
+
import type { ConnectorDeadLetter } from '../store/port.js';
|
|
3
|
+
declare const DEFAULT_BUCKET = "parse_error";
|
|
4
|
+
/** What a caller hands over to park one payload, whatever the connector. */
|
|
5
|
+
export interface ParkOpts<Bucket extends string> {
|
|
6
|
+
/** null when no tenant was resolved for the payload. */
|
|
7
|
+
tenantId: string | null;
|
|
8
|
+
rawPayload: string;
|
|
9
|
+
error: string;
|
|
10
|
+
bucket?: Bucket;
|
|
11
|
+
signature?: string | null;
|
|
12
|
+
}
|
|
13
|
+
/** The columns every connector's table has, as stored. */
|
|
14
|
+
export interface ParkedRow<Bucket extends string> {
|
|
15
|
+
tenantId: string;
|
|
16
|
+
rawPayload: string;
|
|
17
|
+
error: string;
|
|
18
|
+
bucket: Bucket | typeof DEFAULT_BUCKET;
|
|
19
|
+
signature: string | null;
|
|
20
|
+
}
|
|
21
|
+
/** What one connector supplies: the tag that names its table to the store, and its list. `Own` is the columns only its table has. */
|
|
22
|
+
export interface ConnectorDlq<Own, Bucket extends string, Item> {
|
|
23
|
+
readonly letter: (row: ParkedRow<Bucket> & Own) => ConnectorDeadLetter;
|
|
24
|
+
readonly list: (hippoRoot: string, tenantId: string, limit: number) => Item[];
|
|
25
|
+
}
|
|
26
|
+
/** Parks on `store`, else on hippo.db under `hippoRoot`. */
|
|
27
|
+
export declare function parkInDlq<Own, Bucket extends string>(dlq: ConnectorDlq<Own, Bucket, unknown>, hippoRoot: string, opts: ParkOpts<Bucket> & NoInfer<Own>, store?: HippoStore): Promise<number>;
|
|
28
|
+
export declare function listDlq<Item>(dlq: ConnectorDlq<never, never, Item>, hippoRoot: string, opts: {
|
|
29
|
+
tenantId: string;
|
|
30
|
+
limit?: number;
|
|
31
|
+
}): Item[];
|
|
32
|
+
/** Every outcome a replay reports; a connector that re-ingests inline reports the ingest outcome itself. */
|
|
33
|
+
export type ReplayStatus = 'not_found' | 'sig_missing' | 'sig_fail' | 'parse_error' | 'unhandled' | 'unroutable' | 'replayed' | 'ingested' | 'duplicate' | 'skipped' | 'skipped_duplicate' | 'archived';
|
|
34
|
+
export interface ReplayResult {
|
|
35
|
+
ok: boolean;
|
|
36
|
+
status: ReplayStatus;
|
|
37
|
+
memoryId: string | null;
|
|
38
|
+
retryCount: number;
|
|
39
|
+
reason?: string;
|
|
40
|
+
}
|
|
41
|
+
/** A replay that did not go through; `retryCount` is the row's count after any bump the caller made. */
|
|
42
|
+
export declare function replayFailed(status: ReplayStatus, retryCount: number, reason: string): ReplayResult;
|
|
43
|
+
export {};
|
|
44
|
+
//# sourceMappingURL=dlq.d.ts.map
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
// The dead-letter queue every webhook connector parks into: one redaction, one unroutable sentinel, one set of defaults, one replay result.
|
|
2
|
+
import { DLQ_REDACTED_NOTE, redactPayload } from '../util/secret-detect.js';
|
|
3
|
+
import { requireGroup, storeFor } from '../store/index.js';
|
|
4
|
+
/** The tenant stored on a row no tenant was resolved for; the column is NOT NULL. */
|
|
5
|
+
const UNROUTABLE_TENANT = '__unroutable__';
|
|
6
|
+
const DEFAULT_BUCKET = 'parse_error';
|
|
7
|
+
const DEFAULT_LIST_LIMIT = 100;
|
|
8
|
+
/** Parks on `store`, else on hippo.db under `hippoRoot`. */
|
|
9
|
+
export async function parkInDlq(dlq, hippoRoot, opts, store) {
|
|
10
|
+
const rawPayload = redactPayload(opts.rawPayload);
|
|
11
|
+
// A redacted body can never match its signature, so the row keeps none and replay needs --force.
|
|
12
|
+
const redacted = rawPayload !== opts.rawPayload;
|
|
13
|
+
const letter = dlq.letter({
|
|
14
|
+
...opts,
|
|
15
|
+
tenantId: opts.tenantId ?? UNROUTABLE_TENANT,
|
|
16
|
+
rawPayload,
|
|
17
|
+
error: redacted ? `${opts.error}; ${DLQ_REDACTED_NOTE}` : opts.error,
|
|
18
|
+
bucket: opts.bucket ?? DEFAULT_BUCKET,
|
|
19
|
+
signature: redacted ? null : opts.signature ?? null,
|
|
20
|
+
});
|
|
21
|
+
return requireGroup(storeFor({ hippoRoot, store }), 'connectorEvents').parkDeadLetter(letter);
|
|
22
|
+
}
|
|
23
|
+
export function listDlq(dlq, hippoRoot, opts) {
|
|
24
|
+
return dlq.list(hippoRoot, opts.tenantId, opts.limit ?? DEFAULT_LIST_LIMIT);
|
|
25
|
+
}
|
|
26
|
+
/** A replay that did not go through; `retryCount` is the row's count after any bump the caller made. */
|
|
27
|
+
export function replayFailed(status, retryCount, reason) {
|
|
28
|
+
return { ok: false, status, memoryId: null, retryCount, reason };
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=dlq.js.map
|
|
@@ -1,29 +1,7 @@
|
|
|
1
|
-
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
|
|
5
|
-
* - /repos/{repo}/issues/comments -> issue_comments_hwm
|
|
6
|
-
* - /repos/{repo}/pulls/comments -> pr_review_comments_hwm
|
|
7
|
-
*
|
|
8
|
-
* Crash safety: each stream's HWM is persisted ONLY after
|
|
9
|
-
* the stream fully drains. If stream 2 throws mid-flight, stream 1's HWM
|
|
10
|
-
* is committed and stream 2's stays NULL (or its prior value). Rerun
|
|
11
|
-
* picks up from stream 1's saved HWM and re-fetches stream 2 from its
|
|
12
|
-
* last committed point.
|
|
13
|
-
*
|
|
14
|
-
* The /issues endpoint returns BOTH issues and PRs (a PR is
|
|
15
|
-
* an issue with a `pull_request` field). We skip PRs here so they don't
|
|
16
|
-
* get ingested under the issues schema. PRs are handled via webhook in
|
|
17
|
-
* V1 (no /pulls backfill stream — review comments cover the discussion
|
|
18
|
-
* surface).
|
|
19
|
-
*
|
|
20
|
-
* Privacy (V1 limitation): the REST list endpoints don't reliably set
|
|
21
|
-
* `repository.private`, and resolving it requires an extra API call per
|
|
22
|
-
* repo. Backfill leaves the field undefined so scopeFromRepository falls
|
|
23
|
-
* through to private. Callers who know the repo is public can re-tag
|
|
24
|
-
* downstream; the fail-safe default protects private orgs.
|
|
25
|
-
*/
|
|
26
|
-
import type { Context } from '../../api.js';
|
|
1
|
+
/** Paginated backfill of the GitHub issues, issue-comments and PR-review-comments streams, each with its own high-water mark (HWM).
|
|
2
|
+
* An HWM is persisted only after its stream fully drains, so a crash in stream 2 leaves stream 1 committed and stream 2 resumes from its prior HWM.
|
|
3
|
+
* `repository.private` is left undefined (REST lists omit it), so scopeFromRepository falls through to private. */
|
|
4
|
+
import type { Context } from '../../api/index.js';
|
|
27
5
|
import type { GitHubFetcher } from './octokit-client.js';
|
|
28
6
|
export interface BackfillOpts {
|
|
29
7
|
/** e.g. 'acme/repo'. */
|
|
@@ -32,6 +10,8 @@ export interface BackfillOpts {
|
|
|
32
10
|
token: string;
|
|
33
11
|
/** Optional cap on items per stream. Useful for tests. */
|
|
34
12
|
maxPerStream?: number;
|
|
13
|
+
/** First-run `--since`; seeds all three HWMs, COALESCE keeps any HWM a stream already saved. */
|
|
14
|
+
sinceIso?: string;
|
|
35
15
|
/** sleep ms — injectable so tests don't actually wait. */
|
|
36
16
|
sleepMs?: (ms: number) => Promise<void>;
|
|
37
17
|
}
|
|
@@ -1,68 +1,12 @@
|
|
|
1
|
-
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
|
|
5
|
-
* - /repos/{repo}/issues/comments -> issue_comments_hwm
|
|
6
|
-
* - /repos/{repo}/pulls/comments -> pr_review_comments_hwm
|
|
7
|
-
*
|
|
8
|
-
* Crash safety: each stream's HWM is persisted ONLY after
|
|
9
|
-
* the stream fully drains. If stream 2 throws mid-flight, stream 1's HWM
|
|
10
|
-
* is committed and stream 2's stays NULL (or its prior value). Rerun
|
|
11
|
-
* picks up from stream 1's saved HWM and re-fetches stream 2 from its
|
|
12
|
-
* last committed point.
|
|
13
|
-
*
|
|
14
|
-
* The /issues endpoint returns BOTH issues and PRs (a PR is
|
|
15
|
-
* an issue with a `pull_request` field). We skip PRs here so they don't
|
|
16
|
-
* get ingested under the issues schema. PRs are handled via webhook in
|
|
17
|
-
* V1 (no /pulls backfill stream — review comments cover the discussion
|
|
18
|
-
* surface).
|
|
19
|
-
*
|
|
20
|
-
* Privacy (V1 limitation): the REST list endpoints don't reliably set
|
|
21
|
-
* `repository.private`, and resolving it requires an extra API call per
|
|
22
|
-
* repo. Backfill leaves the field undefined so scopeFromRepository falls
|
|
23
|
-
* through to private. Callers who know the repo is public can re-tag
|
|
24
|
-
* downstream; the fail-safe default protects private orgs.
|
|
25
|
-
*/
|
|
26
|
-
import { openHippoDb, closeHippoDb } from '../../db.js';
|
|
1
|
+
/** Paginated backfill of the GitHub issues, issue-comments and PR-review-comments streams, each with its own high-water mark (HWM).
|
|
2
|
+
* An HWM is persisted only after its stream fully drains, so a crash in stream 2 leaves stream 1 committed and stream 2 resumes from its prior HWM.
|
|
3
|
+
* `repository.private` is left undefined (REST lists omit it), so scopeFromRepository falls through to private. */
|
|
4
|
+
import { readCursors, seedCursors, writeHwm } from '../../store/connectors/github.js';
|
|
27
5
|
import { ingestEvent } from './ingest.js';
|
|
6
|
+
import { isJsonObject } from '../../util/json.js';
|
|
28
7
|
const API = 'https://api.github.com';
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
try {
|
|
32
|
-
// SAFETY: row's shape matches the three HWM columns named in the SELECT
|
|
33
|
-
// above; `better-sqlite3`'s `.get()` return type is untyped by the driver.
|
|
34
|
-
const row = db
|
|
35
|
-
.prepare(`SELECT issues_hwm, issue_comments_hwm, pr_review_comments_hwm
|
|
36
|
-
FROM github_cursors WHERE tenant_id = ? AND repo_full_name = ?`)
|
|
37
|
-
.get(tenantId, repo);
|
|
38
|
-
return {
|
|
39
|
-
issues: row?.issues_hwm ?? null,
|
|
40
|
-
issueComments: row?.issue_comments_hwm ?? null,
|
|
41
|
-
prReviewComments: row?.pr_review_comments_hwm ?? null,
|
|
42
|
-
};
|
|
43
|
-
}
|
|
44
|
-
finally {
|
|
45
|
-
closeHippoDb(db);
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
function writeOneHwm(root, tenantId, repo, column, value) {
|
|
49
|
-
const db = openHippoDb(root);
|
|
50
|
-
try {
|
|
51
|
-
db.prepare(`INSERT INTO github_cursors (tenant_id, repo_full_name, ${column}, updated_at)
|
|
52
|
-
VALUES (?, ?, ?, ?)
|
|
53
|
-
ON CONFLICT(tenant_id, repo_full_name)
|
|
54
|
-
DO UPDATE SET ${column} = excluded.${column}, updated_at = excluded.updated_at`).run(tenantId, repo, value, new Date().toISOString());
|
|
55
|
-
}
|
|
56
|
-
finally {
|
|
57
|
-
closeHippoDb(db);
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
/**
|
|
61
|
-
* Build a synthetic `repository` object from the known repo full name.
|
|
62
|
-
* REST list endpoints often omit the full repository object on each item;
|
|
63
|
-
* we already know the repo since the caller passed it. `private` left
|
|
64
|
-
* undefined so scopeFromRepository falls through to private.
|
|
65
|
-
*/
|
|
8
|
+
/** Build a synthetic `repository` from the known repo full name, because REST list items often omit it.
|
|
9
|
+
* `private` stays undefined so scopeFromRepository falls through to private. */
|
|
66
10
|
function syntheticRepository(repoFullName) {
|
|
67
11
|
const [owner, name] = repoFullName.split('/');
|
|
68
12
|
return {
|
|
@@ -72,11 +16,7 @@ function syntheticRepository(repoFullName) {
|
|
|
72
16
|
// private intentionally omitted — fail-safe to private scope.
|
|
73
17
|
};
|
|
74
18
|
}
|
|
75
|
-
/**
|
|
76
|
-
* Parse the trailing issue/PR number from a REST API URL.
|
|
77
|
-
* e.g. https://api.github.com/repos/o/r/issues/42 -> 42
|
|
78
|
-
* https://api.github.com/repos/o/r/pulls/7 -> 7
|
|
79
|
-
*/
|
|
19
|
+
/** Parse the trailing issue/PR number from a REST API URL, e.g. .../issues/42 -> 42. */
|
|
80
20
|
function parseTrailingNumber(url) {
|
|
81
21
|
if (!url)
|
|
82
22
|
return null;
|
|
@@ -86,14 +26,11 @@ function parseTrailingNumber(url) {
|
|
|
86
26
|
const n = Number(m[1]);
|
|
87
27
|
return Number.isFinite(n) ? n : null;
|
|
88
28
|
}
|
|
89
|
-
function isPlainObject(x) {
|
|
90
|
-
return x !== undefined && x !== null && typeof x === 'object' && !Array.isArray(x);
|
|
91
|
-
}
|
|
92
29
|
function isGitHubUser(x) {
|
|
93
|
-
return
|
|
30
|
+
return isJsonObject(x) && typeof x.login === 'string' && typeof x.id === 'number';
|
|
94
31
|
}
|
|
95
32
|
function isIssuesItem(x) {
|
|
96
|
-
if (!
|
|
33
|
+
if (!isJsonObject(x))
|
|
97
34
|
return false;
|
|
98
35
|
if (typeof x.number !== 'number')
|
|
99
36
|
return false;
|
|
@@ -102,47 +39,25 @@ function isIssuesItem(x) {
|
|
|
102
39
|
return isGitHubUser(x.user);
|
|
103
40
|
}
|
|
104
41
|
function isCommentItem(x) {
|
|
105
|
-
if (!
|
|
42
|
+
if (!isJsonObject(x))
|
|
106
43
|
return false;
|
|
107
44
|
if (typeof x.id !== 'number')
|
|
108
45
|
return false;
|
|
109
46
|
return isGitHubUser(x.user);
|
|
110
47
|
}
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
* any other fetch error so the caller leaves the HWM unchanged.
|
|
114
|
-
*
|
|
115
|
-
* - Tracks max(updated_at) across ALL fetched items, including ones
|
|
116
|
-
* `toIngestEvent` rejects (e.g., PRs returned via `/issues`). Otherwise
|
|
117
|
-
* a page of pure PRs would never advance the HWM and the next run would
|
|
118
|
-
* re-fetch the same window forever.
|
|
119
|
-
* - Returns `drained: boolean` — true only when the stream actually ran
|
|
120
|
-
* to next=null. Callers MUST NOT advance the HWM when drained=false,
|
|
121
|
-
* or a capped run would persist a partial HWM and skip the unfetched tail.
|
|
122
|
-
*/
|
|
123
|
-
async function drainStream(ctx, url0, toIngestEvent, fetcher, token, sleep, maxItems) {
|
|
48
|
+
async function drainStream(ctx, url0, options) {
|
|
49
|
+
const { toIngestEvent, maxItems } = options;
|
|
124
50
|
let url = url0;
|
|
125
51
|
let ingested = 0;
|
|
126
52
|
let pages = 0;
|
|
127
53
|
let maxUpdatedAt = null;
|
|
128
54
|
while (url) {
|
|
129
|
-
|
|
130
|
-
let page;
|
|
131
|
-
while (true) {
|
|
132
|
-
page = await fetcher({ url, token });
|
|
133
|
-
if (page.rateLimit.reason !== 'none') {
|
|
134
|
-
await sleep(page.rateLimit.sleepSeconds * 1000);
|
|
135
|
-
continue;
|
|
136
|
-
}
|
|
137
|
-
break;
|
|
138
|
-
}
|
|
55
|
+
const page = await fetchPagePastRateLimit(options, url);
|
|
139
56
|
pages++;
|
|
140
57
|
for (const item of page.items) {
|
|
141
58
|
// Track updated_at on EVERY item, before the toIngestEvent filter, so PR-only pages don't loop forever.
|
|
142
|
-
// SAFETY: updated_at is GitHub's ISO-timestamp field on every item
|
|
143
|
-
|
|
144
|
-
// string comparisons below, matching pre-migration passthrough.
|
|
145
|
-
const updatedAt = isPlainObject(item)
|
|
59
|
+
// SAFETY: updated_at is GitHub's ISO-timestamp field on every item shape this stream returns.
|
|
60
|
+
const updatedAt = isJsonObject(item)
|
|
146
61
|
? (item.updated_at ?? null)
|
|
147
62
|
: null;
|
|
148
63
|
if (updatedAt && (!maxUpdatedAt || updatedAt > maxUpdatedAt)) {
|
|
@@ -151,7 +66,7 @@ async function drainStream(ctx, url0, toIngestEvent, fetcher, token, sleep, maxI
|
|
|
151
66
|
const evt = toIngestEvent(item);
|
|
152
67
|
if (!evt)
|
|
153
68
|
continue;
|
|
154
|
-
const r = ingestEvent(ctx, {
|
|
69
|
+
const r = await ingestEvent(ctx, {
|
|
155
70
|
event: evt,
|
|
156
71
|
rawBody: JSON.stringify(item),
|
|
157
72
|
deliveryId: `backfill:${ctx.tenantId}:${updatedAt ?? ''}`,
|
|
@@ -167,6 +82,16 @@ async function drainStream(ctx, url0, toIngestEvent, fetcher, token, sleep, maxI
|
|
|
167
82
|
}
|
|
168
83
|
return { ingested, pages, maxUpdatedAt, drained: true };
|
|
169
84
|
}
|
|
85
|
+
async function fetchPagePastRateLimit(options, url) {
|
|
86
|
+
const { fetcher, token, sleep } = options;
|
|
87
|
+
// Fetch with rate-limit retry loop.
|
|
88
|
+
while (true) {
|
|
89
|
+
const page = await fetcher({ url, token });
|
|
90
|
+
if (page.rateLimit.reason === 'none')
|
|
91
|
+
return page;
|
|
92
|
+
await sleep(page.rateLimit.sleepSeconds * 1000);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
170
95
|
function issueItemToEvent(item, repository) {
|
|
171
96
|
if (!isIssuesItem(item))
|
|
172
97
|
return null;
|
|
@@ -189,9 +114,8 @@ function issueItemToEvent(item, repository) {
|
|
|
189
114
|
function issueCommentItemToEvent(item, repository) {
|
|
190
115
|
if (!isCommentItem(item))
|
|
191
116
|
return null;
|
|
192
|
-
// SAFETY: this closure only runs against the /issues/comments stream,
|
|
193
|
-
//
|
|
194
|
-
// IssueCommentItem; a missing issue_url is handled defensively below.
|
|
117
|
+
// SAFETY: this closure only runs against the /issues/comments stream, so every item isCommentItem
|
|
118
|
+
// validates is an IssueCommentItem; a missing issue_url is handled below.
|
|
195
119
|
const c = item;
|
|
196
120
|
const issueNumber = parseTrailingNumber(c.issue_url);
|
|
197
121
|
if (issueNumber === null)
|
|
@@ -212,9 +136,8 @@ function issueCommentItemToEvent(item, repository) {
|
|
|
212
136
|
function prReviewCommentItemToEvent(item, repository) {
|
|
213
137
|
if (!isCommentItem(item))
|
|
214
138
|
return null;
|
|
215
|
-
// SAFETY: this closure only runs against the /pulls/comments stream,
|
|
216
|
-
//
|
|
217
|
-
// PrReviewCommentItem; a missing pull_request_url is handled below.
|
|
139
|
+
// SAFETY: this closure only runs against the /pulls/comments stream, so every item isCommentItem
|
|
140
|
+
// validates is a PrReviewCommentItem; a missing pull_request_url is handled below.
|
|
218
141
|
const c = item;
|
|
219
142
|
const prNumber = parseTrailingNumber(c.pull_request_url);
|
|
220
143
|
if (prNumber === null)
|
|
@@ -234,22 +157,29 @@ function prReviewCommentItemToEvent(item, repository) {
|
|
|
234
157
|
}
|
|
235
158
|
/** Drains one stream, then persists its HWM only when the stream ran to the end. */
|
|
236
159
|
async function backfillStream(ctx, opts, sleep, stream) {
|
|
237
|
-
const res = await drainStream(ctx, stream.url,
|
|
160
|
+
const res = await drainStream(ctx, stream.url, {
|
|
161
|
+
toIngestEvent: stream.toIngestEvent,
|
|
162
|
+
fetcher: opts.fetcher,
|
|
163
|
+
token: opts.token,
|
|
164
|
+
sleep,
|
|
165
|
+
maxItems: opts.maxPerStream,
|
|
166
|
+
});
|
|
238
167
|
// A capped run (--max) must leave the HWM at its previous value so the next run re-fetches the unprocessed tail.
|
|
239
168
|
if (res.drained && res.maxUpdatedAt) {
|
|
240
|
-
|
|
169
|
+
writeHwm(ctx.hippoRoot, ctx.tenantId, opts.repoFullName, stream.column, res.maxUpdatedAt);
|
|
241
170
|
}
|
|
242
171
|
return { ingested: res.ingested, pages: res.pages };
|
|
243
172
|
}
|
|
244
173
|
export async function backfillRepo(ctx, opts) {
|
|
245
174
|
const sleep = opts.sleepMs ?? ((ms) => new Promise((r) => setTimeout(r, ms)));
|
|
246
|
-
|
|
175
|
+
if (opts.sinceIso)
|
|
176
|
+
seedCursors(ctx.hippoRoot, ctx.tenantId, opts.repoFullName, opts.sinceIso);
|
|
177
|
+
const cursors = readCursors(ctx.hippoRoot, ctx.tenantId, opts.repoFullName);
|
|
247
178
|
const repository = syntheticRepository(opts.repoFullName);
|
|
248
179
|
const result = {
|
|
249
180
|
ingested: { issues: 0, issueComments: 0, prReviewComments: 0 },
|
|
250
181
|
pages: { issues: 0, issueComments: 0, prReviewComments: 0 },
|
|
251
182
|
};
|
|
252
|
-
// ---------- Stream 1: issues (skip PRs) ----------
|
|
253
183
|
const issuesRes = await backfillStream(ctx, opts, sleep, {
|
|
254
184
|
url: `${API}/repos/${opts.repoFullName}/issues?state=all&per_page=100` +
|
|
255
185
|
(cursors.issues ? `&since=${encodeURIComponent(cursors.issues)}` : ''),
|
|
@@ -258,7 +188,6 @@ export async function backfillRepo(ctx, opts) {
|
|
|
258
188
|
});
|
|
259
189
|
result.ingested.issues = issuesRes.ingested;
|
|
260
190
|
result.pages.issues = issuesRes.pages;
|
|
261
|
-
// ---------- Stream 2: repo-level issue comments ----------
|
|
262
191
|
const commentsRes = await backfillStream(ctx, opts, sleep, {
|
|
263
192
|
url: `${API}/repos/${opts.repoFullName}/issues/comments?per_page=100` +
|
|
264
193
|
(cursors.issueComments ? `&since=${encodeURIComponent(cursors.issueComments)}` : ''),
|
|
@@ -267,7 +196,6 @@ export async function backfillRepo(ctx, opts) {
|
|
|
267
196
|
});
|
|
268
197
|
result.ingested.issueComments = commentsRes.ingested;
|
|
269
198
|
result.pages.issueComments = commentsRes.pages;
|
|
270
|
-
// ---------- Stream 3: repo-level PR review comments ----------
|
|
271
199
|
const prCommentsRes = await backfillStream(ctx, opts, sleep, {
|
|
272
200
|
url: `${API}/repos/${opts.repoFullName}/pulls/comments?per_page=100` +
|
|
273
201
|
(cursors.prReviewComments ? `&since=${encodeURIComponent(cursors.prReviewComments)}` : ''),
|
|
@@ -1,8 +1,7 @@
|
|
|
1
|
-
import { type Context } from '../../api.js';
|
|
1
|
+
import { type Context } from '../../api/index.js';
|
|
2
2
|
export interface DeletionInput {
|
|
3
|
-
/** artifact_ref of the comment, e.g
|
|
4
|
-
* 'github://acme/repo/
|
|
5
|
-
* 'github://acme/repo/pull/7/review_comment/456'. */
|
|
3
|
+
/** artifact_ref of the comment, e.g. 'github://acme/repo/issue/42/comment/123'
|
|
4
|
+
* or 'github://acme/repo/pull/7/review_comment/456'. */
|
|
6
5
|
artifactRef: string;
|
|
7
6
|
/** Source idempotency key for this delete event (sha256 of artifact_ref + ':' + updated_at). */
|
|
8
7
|
idempotencyKey: string;
|
|
@@ -16,21 +15,7 @@ export interface DeletionResult {
|
|
|
16
15
|
status: DeletionStatus;
|
|
17
16
|
archivedCount: number;
|
|
18
17
|
}
|
|
19
|
-
/**
|
|
20
|
-
*
|
|
21
|
-
|
|
22
|
-
* Filter by tenant_id + kind='raw'. Multi-row archive:
|
|
23
|
-
* GitHub edits keep the same artifact_ref, so multiple active raw rows can
|
|
24
|
-
* match a single deletion event. Archive ALL of them.
|
|
25
|
-
*
|
|
26
|
-
* ONE shared DB handle wraps ALL archives + the idempotency mark in a single
|
|
27
|
-
* outer write scope: a per-row failure rolls back the whole batch, idempotency
|
|
28
|
-
* included, so a retry re-attempts cleanly instead of leaving searchable
|
|
29
|
-
* survivors. archiveRawMemory's own inner SAVEPOINT nests safely inside it.
|
|
30
|
-
*
|
|
31
|
-
* Tenant scope and kind='raw' filtering are load-bearing: without them a
|
|
32
|
-
* deletion event from tenant A could archive tenant B's row sharing the same
|
|
33
|
-
* artifact_ref, or accidentally target a distilled row.
|
|
34
|
-
*/
|
|
35
|
-
export declare function handleCommentDeleted(ctx: Context, input: DeletionInput): DeletionResult;
|
|
18
|
+
/** Handle `issue_comment.deleted` and `pull_request_review_comment.deleted`: archive ALL active raw rows for the artifact_ref in one write.
|
|
19
|
+
* Tenant and kind='raw' filtering are load-bearing: without them a deletion could archive another tenant's row or a distilled row. */
|
|
20
|
+
export declare function handleCommentDeleted(ctx: Context, input: DeletionInput): Promise<DeletionResult>;
|
|
36
21
|
//# sourceMappingURL=deletion.d.ts.map
|
|
@@ -1,66 +1,19 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
* artifact_ref, or accidentally target a distilled row.
|
|
19
|
-
*/
|
|
20
|
-
export function handleCommentDeleted(ctx, input) {
|
|
21
|
-
const db = openHippoDb(ctx.hippoRoot);
|
|
22
|
-
try {
|
|
23
|
-
if (hasSeenKey(db, input.idempotencyKey)) {
|
|
24
|
-
return { status: 'duplicate', archivedCount: 0 };
|
|
25
|
-
}
|
|
26
|
-
// SAFETY: rows come from the SELECT above, which projects only the
|
|
27
|
-
// `id` column, so each row is exactly `{ id: string }`.
|
|
28
|
-
const rows = db
|
|
29
|
-
.prepare(`SELECT id FROM memories WHERE artifact_ref = ? AND tenant_id = ? AND kind = 'raw'`)
|
|
30
|
-
.all(input.artifactRef, ctx.tenantId);
|
|
31
|
-
const memoryIds = rows.map((r) => r.id);
|
|
32
|
-
if (memoryIds.length === 0) {
|
|
33
|
-
// Nothing to archive — still mark idempotency so a retry returns 'duplicate'.
|
|
34
|
-
// Independent INSERT, no rollback needed.
|
|
35
|
-
markKeySeen(db, {
|
|
36
|
-
idempotencyKey: input.idempotencyKey,
|
|
37
|
-
deliveryId: input.deliveryId,
|
|
38
|
-
eventName: input.eventName,
|
|
39
|
-
memoryId: null,
|
|
40
|
-
});
|
|
41
|
-
return { status: 'archive_skipped_not_found', archivedCount: 0 };
|
|
42
|
-
}
|
|
43
|
-
// Outer write scope wrapping all archives + the idempotency mark. Any throw
|
|
44
|
-
// rolls back the whole batch so retry sees neither archive nor mark — and
|
|
45
|
-
// re-attempts the full set.
|
|
46
|
-
withWriteScope(db, 'github_delete_all', () => {
|
|
47
|
-
for (const id of memoryIds) {
|
|
48
|
-
archiveRawMemory(db, id, {
|
|
49
|
-
reason: `source_deleted:github:${input.eventName}:${input.deliveryId}`,
|
|
50
|
-
who: ctx.actor.subject,
|
|
51
|
-
});
|
|
52
|
-
}
|
|
53
|
-
markKeySeen(db, {
|
|
54
|
-
idempotencyKey: input.idempotencyKey,
|
|
55
|
-
deliveryId: input.deliveryId,
|
|
56
|
-
eventName: input.eventName,
|
|
57
|
-
memoryId: memoryIds[0],
|
|
58
|
-
});
|
|
59
|
-
});
|
|
60
|
-
return { status: 'archived', archivedCount: memoryIds.length };
|
|
61
|
-
}
|
|
62
|
-
finally {
|
|
63
|
-
closeHippoDb(db);
|
|
64
|
-
}
|
|
1
|
+
import { requireGroup, storeFor } from '../../store/index.js';
|
|
2
|
+
/** Handle `issue_comment.deleted` and `pull_request_review_comment.deleted`: archive ALL active raw rows for the artifact_ref in one write.
|
|
3
|
+
* Tenant and kind='raw' filtering are load-bearing: without them a deletion could archive another tenant's row or a distilled row. */
|
|
4
|
+
export async function handleCommentDeleted(ctx, input) {
|
|
5
|
+
const { artifactRef, idempotencyKey, deliveryId, eventName } = input;
|
|
6
|
+
const done = await requireGroup(storeFor(ctx), 'connectorEvents').archiveDeletedArtifact({
|
|
7
|
+
tenantId: ctx.tenantId,
|
|
8
|
+
actor: ctx.actor.subject,
|
|
9
|
+
artifactRef,
|
|
10
|
+
reason: `source_deleted:github:${eventName}:${deliveryId}`,
|
|
11
|
+
event: { connector: 'github', idempotencyKey, deliveryId, eventName },
|
|
12
|
+
});
|
|
13
|
+
if (done.duplicate)
|
|
14
|
+
return { status: 'duplicate', archivedCount: 0 };
|
|
15
|
+
if (done.archived === 0)
|
|
16
|
+
return { status: 'archive_skipped_not_found', archivedCount: 0 };
|
|
17
|
+
return { status: 'archived', archivedCount: done.archived };
|
|
65
18
|
}
|
|
66
19
|
//# sourceMappingURL=deletion.js.map
|
|
@@ -1,86 +1,20 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
import type
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
*
|
|
9
|
-
* Buckets:
|
|
10
|
-
* - parse_error — raw_payload was not valid JSON
|
|
11
|
-
* - unroutable — no tenant resolved for installation_id / repo_full_name
|
|
12
|
-
* - signature_failed — HMAC did not verify against the active webhook secret
|
|
13
|
-
* - unhandled — parsed but no handler matched the event
|
|
14
|
-
*/
|
|
15
|
-
export type DlqBucket = 'parse_error' | 'unroutable' | 'signature_failed' | 'unhandled';
|
|
16
|
-
export interface DlqItem {
|
|
17
|
-
id: number;
|
|
18
|
-
tenantId: string;
|
|
19
|
-
rawPayload: string;
|
|
20
|
-
error: string;
|
|
21
|
-
eventName: string | null;
|
|
22
|
-
deliveryId: string | null;
|
|
23
|
-
signature: string | null;
|
|
24
|
-
installationId: string | null;
|
|
25
|
-
repoFullName: string | null;
|
|
26
|
-
retryCount: number;
|
|
27
|
-
receivedAt: string;
|
|
28
|
-
retriedAt: string | null;
|
|
29
|
-
bucket: DlqBucket | string;
|
|
30
|
-
}
|
|
31
|
-
/**
|
|
32
|
-
* `tenantId: null` means the connector could not resolve a tenant for the
|
|
33
|
-
* envelope (unroutable installation/repo). Stored as the sentinel
|
|
34
|
-
* `'__unroutable__'` so the NOT NULL column is honored — same convention as
|
|
35
|
-
* Slack DLQ.
|
|
36
|
-
*/
|
|
37
|
-
export interface WriteDlqOpts {
|
|
38
|
-
tenantId: string | null;
|
|
39
|
-
rawPayload: string;
|
|
40
|
-
error: string;
|
|
41
|
-
bucket?: DlqBucket;
|
|
42
|
-
eventName?: string | null;
|
|
43
|
-
deliveryId?: string | null;
|
|
44
|
-
signature?: string | null;
|
|
45
|
-
installationId?: string | null;
|
|
46
|
-
repoFullName?: string | null;
|
|
47
|
-
}
|
|
48
|
-
export declare function writeToDlq(db: DatabaseSyncLike, opts: WriteDlqOpts): number;
|
|
49
|
-
export declare function listDlq(db: DatabaseSyncLike, opts: {
|
|
50
|
-
tenantId: string;
|
|
51
|
-
limit?: number;
|
|
52
|
-
}): DlqItem[];
|
|
53
|
-
export declare function getDlqEntry(db: DatabaseSyncLike, id: number): DlqItem | null;
|
|
1
|
+
import type { Context } from '../../api/index.js';
|
|
2
|
+
import { type DlqBucket, type DlqItem, type GitHubDlqInsert } from '../../store/connectors/github.js';
|
|
3
|
+
import { type ConnectorDlq, type ReplayResult } from '../dlq.js';
|
|
4
|
+
export type { DlqBucket, DlqItem };
|
|
5
|
+
type GitHubOwnColumns = Pick<GitHubDlqInsert, 'eventName' | 'deliveryId' | 'installationId' | 'repoFullName'>;
|
|
6
|
+
/** GitHub's dead-letter table; the event, delivery, installation and repo columns let an operator triage a row without re-reading the payload. */
|
|
7
|
+
export declare const githubDlq: ConnectorDlq<GitHubOwnColumns, DlqBucket, DlqItem>;
|
|
54
8
|
export interface ReplayDlqOpts {
|
|
55
9
|
/** Current webhook secret. If omitted, signature check is skipped (force-only path). */
|
|
56
10
|
webhookSecret?: string;
|
|
57
|
-
/**
|
|
58
|
-
* Previous webhook secret during rotation.
|
|
59
|
-
* Operators rotating GITHUB_WEBHOOK_SECRET would otherwise be forced into
|
|
60
|
-
* --force on DLQ rows written under the old secret. Plumbed through to
|
|
61
|
-
* verifyGitHubSignature.previousSecret.
|
|
62
|
-
*/
|
|
11
|
+
/** Previous webhook secret during rotation, passed to verifyGitHubSignature.previousSecret so old-secret DLQ rows need no --force. */
|
|
63
12
|
previousSecret?: string;
|
|
64
13
|
/** When true, skip signature verification (used for legacy entries after secret rotation). */
|
|
65
14
|
force?: boolean;
|
|
66
15
|
}
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
ok: boolean;
|
|
70
|
-
status: ReplayStatus;
|
|
71
|
-
memoryId: string | null;
|
|
72
|
-
retryCount: number;
|
|
73
|
-
reason?: string;
|
|
74
|
-
}
|
|
75
|
-
/**
|
|
76
|
-
* Hook the webhook route injects to actually re-ingest a row. Decoupling
|
|
77
|
-
* the dispatch keeps this module free of every event-type handler — the
|
|
78
|
-
* route already knows how to route an envelope, so it passes that capability
|
|
79
|
-
* back in.
|
|
80
|
-
*
|
|
81
|
-
* No `idempotencyKey` field: ingest re-derives the key from the parsed event,
|
|
82
|
-
* so a hook trusting a passed-in key would dedupe against a stale one.
|
|
83
|
-
*/
|
|
16
|
+
/** Hook the webhook route injects to re-ingest a row, which keeps this module free of every event-type handler.
|
|
17
|
+
* No `idempotencyKey` field: ingest re-derives it from the parsed event, and a passed-in key could be stale. */
|
|
84
18
|
export type IngestHook = (ctx: Context, args: {
|
|
85
19
|
rawPayload: string;
|
|
86
20
|
eventName: string;
|
|
@@ -88,21 +22,8 @@ export type IngestHook = (ctx: Context, args: {
|
|
|
88
22
|
}) => Promise<{
|
|
89
23
|
memoryId: string | null;
|
|
90
24
|
}>;
|
|
91
|
-
/**
|
|
92
|
-
*
|
|
93
|
-
* 1. Fetch row by id. Not found → `not_found`.
|
|
94
|
-
* 2. If !force and webhookSecret provided, verify signature with the
|
|
95
|
-
* current secret. Fail → bump retry_count, `sig_fail`.
|
|
96
|
-
* Missing signature on the row → `sig_missing` (no bump; --force required).
|
|
97
|
-
* 3. JSON.parse the raw payload. Fail → bump, `parse_error`.
|
|
98
|
-
* 4. Type-guard the envelope. Fail → bump, `unhandled`.
|
|
99
|
-
* 5. If an `ingestHook` is supplied, call it and return its memoryId.
|
|
100
|
-
* If not (dry-run path), bump retry_count and return status `replayed`
|
|
101
|
-
* with memoryId=null. The webhook route wires the real hook.
|
|
102
|
-
*
|
|
103
|
-
* Mirrors Slack's "always use current routing" policy: replays use the
|
|
104
|
-
* deployment state NOW, not at the time of original DLQing.
|
|
105
|
-
*/
|
|
25
|
+
/** Replay a DLQ row through the normal ingest path; a failed signature, parse or envelope check bumps retry_count.
|
|
26
|
+
* Without an `ingestHook` (dry-run) it bumps retry_count and returns `replayed` with memoryId=null; replays use today's routing, not the original's. */
|
|
106
27
|
export declare function replayDlqEntry(ctx: Context, id: number, opts?: ReplayDlqOpts & {
|
|
107
28
|
ingestHook?: IngestHook;
|
|
108
29
|
}): Promise<ReplayResult>;
|