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
|
@@ -1,57 +1,49 @@
|
|
|
1
|
-
import {
|
|
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
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
* 3. X-GitHub-Delivery is required audit metadata (NOT the dedupe seam - see
|
|
18
|
-
* computeIdempotencyKey, which folds the signed body into the key so a
|
|
19
|
-
* replayed body with a fresh delivery UUID still dedupes).
|
|
20
|
-
* 4. Tenant resolved by installation.id → github_installations, then by
|
|
21
|
-
* repository.full_name → github_repositories (PAT-mode multi-tenant).
|
|
22
|
-
* 5. ALWAYS ACK 200 on signed envelopes (DLQ included). 401 only on bad
|
|
23
|
-
* signature; 404 only when GITHUB_WEBHOOK_SECRET is unset (don't expose
|
|
24
|
-
* the route's existence on builds where it's gated off).
|
|
25
|
-
*
|
|
26
|
-
* Bearer auth is skipped on purpose: server.ts checks isPublicRoute before calling this.
|
|
27
|
-
*/
|
|
28
|
-
export async function handleGitHubEventsWebhook({ req, res, opts }) {
|
|
29
|
-
const rawBody = await readBody(req);
|
|
30
|
-
const secret = envGithubWebhookSecret();
|
|
10
|
+
import { resolveTenantId } from '../../store/tenant.js';
|
|
11
|
+
import { HttpError, JSON_HEADERS, isHeaderString, closeIfBodyUnread, readWebhookBody, sendJson, } from '../../util/http-util.js';
|
|
12
|
+
/** GitHub webhook receiver: HMAC SHA-256 over the raw body, event type from the X-GitHub-Event header, tenant by installation.id then repository.full_name.
|
|
13
|
+
* ACKs 200 on signed envelopes (DLQ too); 401 only on a bad signature; 404 when GITHUB_WEBHOOK_SECRET is unset. No Bearer: server.ts checks isPublicRoute. */
|
|
14
|
+
export async function handleGitHubEventsWebhook(request, store) {
|
|
15
|
+
const { req, res, opts } = request;
|
|
16
|
+
// Secret and signature header before the body, so a caller with neither cannot make the server buffer one.
|
|
17
|
+
const secret = envGitHubWebhookSecret();
|
|
31
18
|
if (!secret) {
|
|
19
|
+
closeIfBodyUnread(request);
|
|
32
20
|
res.writeHead(404, JSON_HEADERS);
|
|
33
21
|
res.end(JSON.stringify({ error: 'not found' }));
|
|
34
22
|
return;
|
|
35
23
|
}
|
|
36
|
-
const previousSecret =
|
|
24
|
+
const previousSecret = envGitHubWebhookSecretPrevious();
|
|
37
25
|
const sigHdr = req.headers['x-hub-signature-256'];
|
|
38
26
|
const eventHdr = req.headers['x-github-event'];
|
|
39
27
|
const deliveryHdr = req.headers['x-github-delivery'];
|
|
40
28
|
const sigStr = isHeaderString(sigHdr) ? sigHdr : null;
|
|
41
29
|
const eventName = isHeaderString(eventHdr) ? eventHdr : null;
|
|
42
30
|
const deliveryId = isHeaderString(deliveryHdr) ? deliveryHdr : null;
|
|
43
|
-
if (sigStr === null
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
31
|
+
if (sigStr === null) {
|
|
32
|
+
closeIfBodyUnread(request);
|
|
33
|
+
throw new HttpError(401, 'invalid GitHub signature');
|
|
34
|
+
}
|
|
35
|
+
const rawBody = await readWebhookBody(request);
|
|
36
|
+
if (!verifyGitHubSignature({
|
|
37
|
+
rawBody,
|
|
38
|
+
signature: sigStr,
|
|
39
|
+
webhookSecret: secret,
|
|
40
|
+
previousSecret,
|
|
41
|
+
})) {
|
|
50
42
|
throw new HttpError(401, 'invalid GitHub signature');
|
|
51
43
|
}
|
|
52
44
|
// Signature OK from here on. Everything else is ACK-200; bad envelopes go
|
|
53
45
|
// to the DLQ and a human can replay later.
|
|
54
|
-
routeSignedDelivery({ hippoRoot: opts.hippoRoot, res, rawBody, eventName, deliveryId, signature: sigStr });
|
|
46
|
+
await routeSignedDelivery({ hippoRoot: opts.hippoRoot, store, res, rawBody, eventName, deliveryId, signature: sigStr });
|
|
55
47
|
}
|
|
56
48
|
const ALLOWED_EVENTS = new Set([
|
|
57
49
|
'issues',
|
|
@@ -59,28 +51,23 @@ const ALLOWED_EVENTS = new Set([
|
|
|
59
51
|
'pull_request',
|
|
60
52
|
'pull_request_review_comment',
|
|
61
53
|
]);
|
|
62
|
-
function
|
|
63
|
-
const
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
});
|
|
76
|
-
}
|
|
77
|
-
finally {
|
|
78
|
-
closeHippoDb(db);
|
|
79
|
-
}
|
|
54
|
+
async function parkAndAck(d, park) {
|
|
55
|
+
const row = {
|
|
56
|
+
tenantId: park.tenantId,
|
|
57
|
+
rawPayload: d.rawBody,
|
|
58
|
+
error: park.error,
|
|
59
|
+
bucket: park.bucket,
|
|
60
|
+
eventName: d.eventName,
|
|
61
|
+
deliveryId: d.deliveryId,
|
|
62
|
+
signature: d.signature,
|
|
63
|
+
installationId: park.installationId,
|
|
64
|
+
repoFullName: park.repoFullName,
|
|
65
|
+
};
|
|
66
|
+
await parkInDlq(githubDlq, d.hippoRoot, row, d.store);
|
|
80
67
|
sendJson(d.res, 200, { ok: true, status: 'dlq' });
|
|
81
68
|
}
|
|
82
|
-
function routeSignedDelivery(d) {
|
|
83
|
-
const body = parseEnvelopeOrPark(d);
|
|
69
|
+
async function routeSignedDelivery(d) {
|
|
70
|
+
const body = await parseEnvelopeOrPark(d);
|
|
84
71
|
if (body === null || d.deliveryId === null)
|
|
85
72
|
return;
|
|
86
73
|
const routing = {
|
|
@@ -89,18 +76,9 @@ function routeSignedDelivery(d) {
|
|
|
89
76
|
};
|
|
90
77
|
// Tenant resolution. Fail closed on multi-tenant installs with unknown
|
|
91
78
|
// 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
|
-
}
|
|
79
|
+
const resolvedTenant = await resolveTenantForGitHub(d.hippoRoot, routing, d.store);
|
|
102
80
|
if (resolvedTenant === null) {
|
|
103
|
-
|
|
81
|
+
await parkAndAck(d, {
|
|
104
82
|
...routing,
|
|
105
83
|
tenantId: null,
|
|
106
84
|
error: `unroutable: installation_id=${routing.installationId ?? '(none)'} repo=${routing.repoFullName ?? '(none)'}`,
|
|
@@ -112,11 +90,12 @@ function routeSignedDelivery(d) {
|
|
|
112
90
|
hippoRoot: d.hippoRoot,
|
|
113
91
|
tenantId: resolvedTenant,
|
|
114
92
|
actor: { subject: 'connector:github', role: 'admin' },
|
|
93
|
+
store: d.store,
|
|
115
94
|
};
|
|
116
|
-
if (dispatchGitHubEvent(d, ctx, body, d.deliveryId, routing))
|
|
95
|
+
if (await dispatchGitHubEvent(d, ctx, body, d.deliveryId, routing))
|
|
117
96
|
return;
|
|
118
97
|
// Header allow-listed but body shape didn't satisfy the matching guard.
|
|
119
|
-
|
|
98
|
+
await parkAndAck(d, {
|
|
120
99
|
...routing,
|
|
121
100
|
tenantId: resolvedTenant,
|
|
122
101
|
error: `body shape did not match X-GitHub-Event=${d.eventName}`,
|
|
@@ -124,7 +103,7 @@ function routeSignedDelivery(d) {
|
|
|
124
103
|
});
|
|
125
104
|
}
|
|
126
105
|
/** Answers ping and parks every unusable body; returns the envelope only when ingest should go on. */
|
|
127
|
-
function parseEnvelopeOrPark(d) {
|
|
106
|
+
async function parseEnvelopeOrPark(d) {
|
|
128
107
|
// Cheap regex extraction of installation_id / repo for DLQ rows that fail
|
|
129
108
|
// to JSON.parse - gives operators something to triage.
|
|
130
109
|
const installationFromRaw = (() => {
|
|
@@ -135,8 +114,8 @@ function parseEnvelopeOrPark(d) {
|
|
|
135
114
|
const m = d.rawBody.match(/"full_name"\s*:\s*"([^"]+)"/);
|
|
136
115
|
return m ? m[1] : null;
|
|
137
116
|
})();
|
|
138
|
-
const parkRaw = (error, bucket) => {
|
|
139
|
-
|
|
117
|
+
const parkRaw = async (error, bucket) => {
|
|
118
|
+
await parkAndAck(d, {
|
|
140
119
|
tenantId: resolveTenantId({}),
|
|
141
120
|
error,
|
|
142
121
|
bucket,
|
|
@@ -169,53 +148,55 @@ function parseEnvelopeOrPark(d) {
|
|
|
169
148
|
return body;
|
|
170
149
|
}
|
|
171
150
|
/** 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
|
-
|
|
151
|
+
async function dispatchGitHubEvent(d, ctx, body, deliveryId, routing) {
|
|
152
|
+
const action = deliveryAction(d.eventName, body);
|
|
153
|
+
if (action === null)
|
|
154
|
+
return false;
|
|
155
|
+
if (action.kind === 'manual-review') {
|
|
156
|
+
// issues.deleted (admin-initiated) is logged, not archived: archiving could lose the memory if the issue moves between accounts.
|
|
157
|
+
await parkAndAck(d, {
|
|
158
|
+
...routing,
|
|
159
|
+
tenantId: ctx.tenantId,
|
|
160
|
+
error: 'issues.deleted requires manual review',
|
|
161
|
+
bucket: 'unhandled',
|
|
162
|
+
});
|
|
163
|
+
}
|
|
164
|
+
else if (action.kind === 'archive-comment') {
|
|
180
165
|
// The "deleted:" key namespace keeps this from colliding with the ingest key for the
|
|
181
166
|
// same artifact; a shared key would make hasSeenKey skip the archive.
|
|
182
|
-
const idempotencyKey = computeGitHubDeletionKey(artifactRef, updatedAt);
|
|
183
|
-
const r = handleGitHubCommentDeleted(ctx, {
|
|
184
|
-
artifactRef,
|
|
167
|
+
const idempotencyKey = computeGitHubDeletionKey(action.artifactRef, action.updatedAt);
|
|
168
|
+
const r = await handleGitHubCommentDeleted(ctx, {
|
|
169
|
+
artifactRef: action.artifactRef,
|
|
185
170
|
idempotencyKey,
|
|
186
171
|
deliveryId,
|
|
187
|
-
eventName:
|
|
172
|
+
eventName: action.eventName,
|
|
188
173
|
});
|
|
189
|
-
sendJson(res, 200, { ok: true, status: r.status, archivedCount: r.archivedCount });
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
174
|
+
sendJson(d.res, 200, { ok: true, status: r.status, archivedCount: r.archivedCount });
|
|
175
|
+
}
|
|
176
|
+
else {
|
|
177
|
+
const r = await ingestGitHubEvent(ctx, { event: action.event, rawBody: d.rawBody, deliveryId });
|
|
178
|
+
sendJson(d.res, 200, { ok: true, status: r.status, memoryId: r.memoryId });
|
|
179
|
+
}
|
|
180
|
+
return true;
|
|
181
|
+
}
|
|
182
|
+
// Dispatch by event header. Type guards cross-check the body shape against
|
|
183
|
+
// the header so a payload of one event type cannot satisfy another's guard.
|
|
184
|
+
function deliveryAction(eventName, body) {
|
|
194
185
|
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 });
|
|
186
|
+
if (body.action === 'deleted')
|
|
187
|
+
return { kind: 'manual-review' };
|
|
188
|
+
return { kind: 'ingest', event: { eventName: 'issues', payload: body } };
|
|
208
189
|
}
|
|
209
190
|
if (eventName === 'issue_comment' && isGitHubIssueCommentEvent(body, 'issue_comment')) {
|
|
210
191
|
if (body.action === 'deleted') {
|
|
211
192
|
const repo = body.repository?.full_name ?? '';
|
|
212
193
|
const artifactRef = `github://${repo}/issue/${body.issue.number}/comment/${body.comment.id}`;
|
|
213
|
-
return
|
|
194
|
+
return { kind: 'archive-comment', eventName, artifactRef, updatedAt: body.comment.updated_at ?? null };
|
|
214
195
|
}
|
|
215
|
-
return ingest
|
|
196
|
+
return { kind: 'ingest', event: { eventName: 'issue_comment', payload: body } };
|
|
216
197
|
}
|
|
217
198
|
if (eventName === 'pull_request' && isGitHubPullRequestEvent(body, 'pull_request')) {
|
|
218
|
-
return ingest
|
|
199
|
+
return { kind: 'ingest', event: { eventName: 'pull_request', payload: body } };
|
|
219
200
|
}
|
|
220
201
|
if (eventName === 'pull_request_review_comment' &&
|
|
221
202
|
isGitHubPullRequestReviewCommentEvent(body, 'pull_request_review_comment')) {
|
|
@@ -223,10 +204,10 @@ function dispatchGitHubEvent(d, ctx, body, deliveryId, routing) {
|
|
|
223
204
|
const repo = body.repository?.full_name ?? '';
|
|
224
205
|
const artifactRef = `github://${repo}/pull/${body.pull_request.number}/review_comment/${body.comment.id}`;
|
|
225
206
|
// Same "deleted:" key namespace as the issue_comment branch above.
|
|
226
|
-
return
|
|
207
|
+
return { kind: 'archive-comment', eventName, artifactRef, updatedAt: body.comment.updated_at ?? null };
|
|
227
208
|
}
|
|
228
|
-
return ingest
|
|
209
|
+
return { kind: 'ingest', event: { eventName: 'pull_request_review_comment', payload: body } };
|
|
229
210
|
}
|
|
230
|
-
return
|
|
211
|
+
return null;
|
|
231
212
|
}
|
|
232
213
|
//# sourceMappingURL=webhook.js.map
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { Context } from '../../api.js';
|
|
1
|
+
import type { Context } from '../../api/index.js';
|
|
2
2
|
import type { SlackMessageEvent } from './types.js';
|
|
3
3
|
import type { ChannelMeta } from './scope.js';
|
|
4
4
|
export interface SlackHistoryPage {
|
|
@@ -9,14 +9,8 @@ export type SlackHistoryFetcher = (args: {
|
|
|
9
9
|
channelId: string;
|
|
10
10
|
/** Slack's opaque pagination token. Null on first page of a backfill run. */
|
|
11
11
|
cursor: string | null;
|
|
12
|
-
/**
|
|
13
|
-
*
|
|
14
|
-
* `slack_cursors.latest_ts` on the FIRST page of a rerun; unused on
|
|
15
|
-
* subsequent pages within one run (where `cursor` carries us forward).
|
|
16
|
-
* Distinct from `cursor` because Slack treats `cursor` as opaque token
|
|
17
|
-
* and `oldest` as a numeric ts — feeding `latest_ts` as `cursor` breaks
|
|
18
|
-
* against the live API even though it round-trips through test fetchers.
|
|
19
|
-
*/
|
|
12
|
+
/** Incremental-resume bound: skip messages with ts <= oldest, set from `slack_cursors.latest_ts` on the first page only.
|
|
13
|
+
* Kept apart from `cursor` because Slack treats `cursor` as an opaque token, so feeding latest_ts as cursor fails on the live API. */
|
|
20
14
|
oldest?: string;
|
|
21
15
|
}) => Promise<SlackHistoryPage>;
|
|
22
16
|
export interface BackfillOpts {
|
|
@@ -26,15 +20,8 @@ export interface BackfillOpts {
|
|
|
26
20
|
/** Stop after this many messages. Default: unlimited. */
|
|
27
21
|
maxMessages?: number;
|
|
28
22
|
}
|
|
29
|
-
/**
|
|
30
|
-
*
|
|
31
|
-
* message. The cursor is persisted to `slack_cursors` after every page so a
|
|
32
|
-
* crash mid-backfill resumes near where it left off.
|
|
33
|
-
*
|
|
34
|
-
* Each ingested message uses a synthesized eventId of the form
|
|
35
|
-
* `backfill:${teamId}:${channelId}:${ts}`. Reruns dedupe via the
|
|
36
|
-
* `slack_event_log` PK so calling `backfillChannel` twice is safe.
|
|
37
|
-
*/
|
|
23
|
+
/** Page through `conversations.history` and ingest each message, persisting the cursor to `slack_cursors` after every page.
|
|
24
|
+
* The synthesized eventId `backfill:${teamId}:${channelId}:${ts}` makes reruns dedupe via the `slack_event_log` PK. */
|
|
38
25
|
export declare function backfillChannel(ctx: Context, opts: BackfillOpts): Promise<{
|
|
39
26
|
ingested: number;
|
|
40
27
|
pages: number;
|
|
@@ -1,44 +1,11 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { saveSlackCursor, slackCursor } from '../../store/connectors/slack.js';
|
|
2
2
|
import { ingestMessage } from './ingest.js';
|
|
3
|
-
|
|
4
|
-
|
|
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
|
-
/**
|
|
28
|
-
* Page through `conversations.history` via the injected fetcher and ingest each
|
|
29
|
-
* message. The cursor is persisted to `slack_cursors` after every page so a
|
|
30
|
-
* crash mid-backfill resumes near where it left off.
|
|
31
|
-
*
|
|
32
|
-
* Each ingested message uses a synthesized eventId of the form
|
|
33
|
-
* `backfill:${teamId}:${channelId}:${ts}`. Reruns dedupe via the
|
|
34
|
-
* `slack_event_log` PK so calling `backfillChannel` twice is safe.
|
|
35
|
-
*/
|
|
3
|
+
/** Page through `conversations.history` and ingest each message, persisting the cursor to `slack_cursors` after every page.
|
|
4
|
+
* The synthesized eventId `backfill:${teamId}:${channelId}:${ts}` makes reruns dedupe via the `slack_event_log` PK. */
|
|
36
5
|
export async function backfillChannel(ctx, opts) {
|
|
37
|
-
//
|
|
38
|
-
//
|
|
39
|
-
|
|
40
|
-
// cursor and break against the live API on rerun.
|
|
41
|
-
const resumeFrom = readCursor(ctx.hippoRoot, ctx.tenantId, opts.channel.id);
|
|
6
|
+
// `oldest` (numeric ts) is the resume bound for the first page only; `cursor` starts null and Slack mints the next-page token.
|
|
7
|
+
// Mixing the two would feed a numeric ts as an opaque cursor and break on rerun.
|
|
8
|
+
const resumeFrom = slackCursor(ctx.hippoRoot, ctx.tenantId, opts.channel.id);
|
|
42
9
|
let cursor = null;
|
|
43
10
|
let ingested = 0;
|
|
44
11
|
let pages = 0;
|
|
@@ -51,7 +18,7 @@ export async function backfillChannel(ctx, opts) {
|
|
|
51
18
|
});
|
|
52
19
|
pages++;
|
|
53
20
|
for (const msg of page.messages) {
|
|
54
|
-
const r = ingestMessage(ctx, {
|
|
21
|
+
const r = await ingestMessage(ctx, {
|
|
55
22
|
teamId: opts.teamId,
|
|
56
23
|
channel: opts.channel,
|
|
57
24
|
message: msg,
|
|
@@ -63,12 +30,12 @@ export async function backfillChannel(ctx, opts) {
|
|
|
63
30
|
latestTs = msg.ts;
|
|
64
31
|
if (opts.maxMessages && ingested >= opts.maxMessages) {
|
|
65
32
|
if (latestTs)
|
|
66
|
-
|
|
33
|
+
saveSlackCursor(ctx.hippoRoot, ctx.tenantId, opts.channel.id, latestTs);
|
|
67
34
|
return { ingested, pages };
|
|
68
35
|
}
|
|
69
36
|
}
|
|
70
37
|
if (latestTs)
|
|
71
|
-
|
|
38
|
+
saveSlackCursor(ctx.hippoRoot, ctx.tenantId, opts.channel.id, latestTs);
|
|
72
39
|
if (!page.next_cursor)
|
|
73
40
|
break;
|
|
74
41
|
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,55 +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, store: undefined }, // afterArchive runs on hippo.db's own handle, never through a store
|
|
48
|
-
memoryId, `source_deleted:slack:${input.teamId}:${input.channelId}:${input.deletedTs}`, {
|
|
49
|
-
afterArchive: (sameDb, archivedId) => {
|
|
50
|
-
markEventSeen(sameDb, input.eventId, archivedId);
|
|
51
|
-
},
|
|
52
|
-
});
|
|
23
|
+
await archiveRaw(ctx, memoryId, `source_deleted:slack:${input.teamId}:${input.channelId}:${input.deletedTs}`, { event });
|
|
53
24
|
return { status: 'archived', memoryId };
|
|
54
25
|
}
|
|
55
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,31 +14,7 @@ export interface ReplayDlqOpts {
|
|
|
49
14
|
/** Skew window override for tests. */
|
|
50
15
|
skewSeconds?: number;
|
|
51
16
|
}
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
memoryId: string | null;
|
|
56
|
-
retryCount: number;
|
|
57
|
-
reason?: string;
|
|
58
|
-
}
|
|
59
|
-
/**
|
|
60
|
-
* Replay a DLQ row through the normal ingest path. Used by `hippo slack dlq
|
|
61
|
-
* replay <id> [--force]`.
|
|
62
|
-
*
|
|
63
|
-
* Behavior:
|
|
64
|
-
* 1. SELECT the row.
|
|
65
|
-
* 2. If signature + slack_timestamp are present and `signingSecret` is set,
|
|
66
|
-
* re-verify with the CURRENT secret (not previous). Failure → bail unless
|
|
67
|
-
* --force. Legacy rows from before v19 may have NULL signature; those
|
|
68
|
-
* require --force to replay safely.
|
|
69
|
-
* 3. Re-parse the raw_payload and dispatch to ingestMessage / handleMessageDeleted.
|
|
70
|
-
* 4. On success: mark retried_at, increment retry_count.
|
|
71
|
-
* 5. On failure: increment retry_count only, leave the row.
|
|
72
|
-
*
|
|
73
|
-
* The replay always uses the routing the deployment has NOW (current
|
|
74
|
-
* slack_workspaces table + env), not whatever was in effect when the original
|
|
75
|
-
* envelope was DLQed. That is intentional: the DLQ exists to be drained after
|
|
76
|
-
* the operator fixed the routing.
|
|
77
|
-
*/
|
|
78
|
-
export declare function replayDlqEntry(ctx: Pick<Context, 'hippoRoot'>, id: number, opts?: ReplayDlqOpts): ReplayDlqResult;
|
|
17
|
+
/** Replay a DLQ row via the normal ingest path (`hippo slack dlq replay <id> [--force]`), re-verifying the signature with the CURRENT secret unless forced.
|
|
18
|
+
* Rows with a NULL signature need --force; replays use today's routing, because the DLQ exists to be drained after the operator fixed routing. */
|
|
19
|
+
export declare function replayDlqEntry(ctx: Pick<Context, 'hippoRoot'>, id: number, opts?: ReplayDlqOpts): Promise<ReplayResult>;
|
|
79
20
|
//# sourceMappingURL=dlq.d.ts.map
|