hippo-memory 1.69.0 → 1.70.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +5 -2
- package/dist/agent-memories/apply.d.ts +3 -3
- package/dist/agent-memories/apply.js +16 -31
- package/dist/agent-memories/claude-code.d.ts +1 -3
- package/dist/agent-memories/claude-code.js +11 -7
- package/dist/agent-memories/copilot.js +3 -2
- package/dist/agent-memories/files.js +3 -2
- package/dist/agent-memories/gemini.js +6 -5
- package/dist/agent-memories/keys.js +3 -2
- package/dist/agent-memories/legacy.d.ts +2 -2
- package/dist/agent-memories/legacy.js +2 -2
- package/dist/agent-memories/report.d.ts +1 -1
- package/dist/agent-memories/report.js +1 -1
- package/dist/agent-memories/source.d.ts +1 -1
- package/dist/agent-memories/source.js +6 -5
- package/dist/agent-memories/sync.d.ts +1 -1
- package/dist/agent-memories/sync.js +24 -33
- package/dist/agent-memories/types.d.ts +1 -1
- package/dist/api/assemble.d.ts +2 -2
- package/dist/api/assemble.js +42 -32
- package/dist/api/audit.d.ts +4 -7
- package/dist/api/audit.js +6 -20
- package/dist/api/auth.d.ts +5 -18
- package/dist/api/auth.js +44 -194
- package/dist/api/auto-sleep.d.ts +13 -0
- package/dist/api/auto-sleep.js +32 -0
- package/dist/{availability.d.ts → api/availability.d.ts} +2 -2
- package/dist/{availability.js → api/availability.js} +12 -29
- package/dist/{context-auto.js → api/context-auto.js} +2 -1
- package/dist/{context-render.d.ts → api/context-render.d.ts} +4 -4
- package/dist/{context-render.js → api/context-render.js} +7 -6
- package/dist/api/context-select.d.ts +5 -5
- package/dist/api/context-select.js +37 -45
- package/dist/api/context-types.d.ts +5 -5
- package/dist/api/context.d.ts +2 -4
- package/dist/api/context.js +48 -61
- package/dist/api/dormant.d.ts +3 -3
- package/dist/api/dormant.js +38 -107
- package/dist/api/drill-down.d.ts +2 -2
- package/dist/api/drill-down.js +37 -65
- package/dist/api/forget.d.ts +2 -11
- package/dist/api/forget.js +13 -46
- package/dist/api/goals.d.ts +1 -1
- package/dist/api/goals.js +2 -2
- package/dist/api/index.d.ts +26 -0
- package/dist/api/index.js +29 -0
- package/dist/api/instruction-detect.js +74 -0
- package/dist/api/learn.js +63 -55
- package/dist/api/ledger-db.d.ts +20 -0
- package/dist/api/ledger-db.js +79 -0
- package/dist/api/on-store.d.ts +16 -0
- package/dist/api/on-store.js +36 -0
- package/dist/api/outcome.d.ts +5 -42
- package/dist/api/outcome.js +15 -80
- package/dist/{pilot-arm.d.ts → api/pilot-arm.d.ts} +1 -1
- package/dist/{pilot-arm.js → api/pilot-arm.js} +15 -23
- package/dist/api/promote.d.ts +4 -15
- package/dist/api/promote.js +29 -106
- package/dist/{prompt-hook.d.ts → api/prompt-hook.d.ts} +7 -7
- package/dist/{prompt-hook.js → api/prompt-hook.js} +34 -53
- package/dist/api/quarantine.d.ts +5 -5
- package/dist/api/quarantine.js +30 -106
- package/dist/api/recall-core.d.ts +4 -0
- package/dist/api/recall-core.js +112 -0
- package/dist/{recall-history.js → api/recall-history.js} +30 -25
- package/dist/{recall-pipeline.d.ts → api/recall-pipeline.d.ts} +5 -5
- package/dist/{recall-pipeline.js → api/recall-pipeline.js} +47 -42
- package/dist/api/recall-record.d.ts +10 -13
- package/dist/api/recall-record.js +10 -30
- package/dist/api/recall-request.d.ts +2 -2
- package/dist/api/recall-request.js +3 -3
- package/dist/api/recall-types.d.ts +41 -16
- package/dist/api/recall.d.ts +1 -1
- package/dist/api/recall.js +39 -37
- package/dist/api/remember.d.ts +10 -12
- package/dist/api/remember.js +29 -45
- package/dist/api/session-owners.d.ts +4 -0
- package/dist/api/session-owners.js +17 -0
- package/dist/api/sleep-run.d.ts +7 -7
- package/dist/api/sleep-run.js +63 -75
- package/dist/api/sleep.d.ts +1 -1
- package/dist/api/tokens.d.ts +2 -2
- package/dist/api/tokens.js +9 -21
- package/dist/api/types.d.ts +2 -2
- package/dist/api/types.js +1 -1
- package/dist/capture/caller-session.d.ts +2 -2
- package/dist/capture/caller-session.js +8 -8
- package/dist/{capture-error.d.ts → capture/capture-error.d.ts} +2 -2
- package/dist/{capture-error.js → capture/capture-error.js} +7 -7
- package/dist/{codex-patch.js → capture/codex-patch.js} +1 -1
- package/dist/capture/command.d.ts +1 -1
- package/dist/capture/command.js +54 -41
- package/dist/capture/compact-resume-caller.d.ts +1 -1
- package/dist/capture/compact-resume-caller.js +7 -7
- package/dist/capture/compact.d.ts +4 -1
- package/dist/capture/compact.js +40 -22
- package/dist/capture/compaction-items-caller.d.ts +1 -1
- package/dist/capture/compaction-items-caller.js +7 -5
- package/dist/{compaction-items.js → capture/compaction-items.js} +27 -3
- package/dist/{compaction-record.d.ts → capture/compaction-record.d.ts} +10 -6
- package/dist/{compaction-record.js → capture/compaction-record.js} +48 -94
- package/dist/{compaction-spool.js → capture/compaction-spool.js} +17 -13
- package/dist/capture/copilot-transcript.js +1 -1
- package/dist/capture/extract.js +2 -2
- package/dist/capture/failure-caller.d.ts +2 -2
- package/dist/capture/failure-caller.js +6 -6
- package/dist/capture/failure-reading.d.ts +2 -5
- package/dist/capture/failure-reading.js +11 -12
- package/dist/{handoff-evidence.d.ts → capture/handoff-evidence.d.ts} +1 -1
- package/dist/{handoff-evidence.js → capture/handoff-evidence.js} +2 -1
- package/dist/capture/pre-compact-caller.d.ts +1 -1
- package/dist/capture/pre-compact-caller.js +2 -2
- package/dist/{session-digest.d.ts → capture/session-digest.d.ts} +1 -5
- package/dist/{session-digest.js → capture/session-digest.js} +17 -23
- package/dist/capture/session-end-caller.d.ts +2 -2
- package/dist/capture/session-end-caller.js +1 -1
- package/dist/capture/session-texts.d.ts +1 -1
- package/dist/capture/session-texts.js +5 -5
- package/dist/capture/session-worker.js +6 -4
- package/dist/{share-scrub.js → capture/share-scrub.js} +2 -2
- package/dist/capture/transcript.js +68 -74
- package/dist/capture/working-state.d.ts +0 -3
- package/dist/capture/working-state.js +7 -7
- package/dist/{audit-prune.d.ts → cli/audit-prune.d.ts} +1 -2
- package/dist/{audit-prune.js → cli/audit-prune.js} +5 -39
- package/dist/cli/audit.d.ts +2 -2
- package/dist/cli/audit.js +77 -72
- package/dist/cli/auth.d.ts +2 -1
- package/dist/cli/auth.js +18 -20
- package/dist/cli/briefs.d.ts +4 -3
- package/dist/cli/briefs.js +59 -181
- package/dist/cli/card.d.ts +2 -1
- package/dist/cli/card.js +25 -23
- package/dist/{client.d.ts → cli/client.d.ts} +1 -1
- package/dist/{client.js → cli/client.js} +1 -1
- package/dist/cli/compact-resume-payload.d.ts +8 -0
- package/dist/cli/compact-resume-payload.js +39 -0
- package/dist/cli/context.d.ts +2 -13
- package/dist/cli/context.js +41 -71
- package/dist/cli/continuity.d.ts +6 -5
- package/dist/cli/continuity.js +109 -99
- package/dist/{correction-latency.d.ts → cli/correction-latency.d.ts} +1 -1
- package/dist/cli/curate.d.ts +9 -9
- package/dist/cli/curate.js +177 -149
- package/dist/cli/dag.d.ts +4 -4
- package/dist/cli/dag.js +46 -34
- package/dist/cli/decisions.d.ts +4 -3
- package/dist/cli/decisions.js +108 -218
- package/dist/cli/eval.d.ts +1 -3
- package/dist/cli/eval.js +43 -31
- package/dist/cli/explain.d.ts +1 -1
- package/dist/cli/explain.js +35 -19
- package/dist/cli/flag-values.d.ts +25 -0
- package/dist/cli/flag-values.js +103 -0
- package/dist/cli/flags.d.ts +303 -0
- package/dist/cli/flags.js +169 -0
- package/dist/cli/goals.d.ts +2 -1
- package/dist/cli/goals.js +39 -34
- package/dist/cli/hook-runtime.d.ts +49 -0
- package/dist/cli/hook-runtime.js +155 -0
- package/dist/cli/init.d.ts +2 -1
- package/dist/cli/init.js +151 -118
- package/dist/cli/install-steps.d.ts +7 -0
- package/dist/cli/install-steps.js +110 -0
- package/dist/cli/last-sleep.d.ts +2 -1
- package/dist/cli/last-sleep.js +9 -7
- package/dist/cli/maintenance.d.ts +5 -4
- package/dist/cli/maintenance.js +31 -27
- package/dist/cli/object-verbs.d.ts +40 -0
- package/dist/cli/object-verbs.js +65 -0
- package/dist/{owner-validation.d.ts → cli/owner-validation.d.ts} +0 -1
- package/dist/{owner-validation.js → cli/owner-validation.js} +2 -2
- package/dist/cli/playbooks.d.ts +4 -3
- package/dist/cli/playbooks.js +77 -280
- package/dist/cli/print.d.ts +18 -0
- package/dist/cli/print.js +85 -0
- package/dist/cli/projects.d.ts +2 -3
- package/dist/cli/projects.js +56 -49
- package/dist/{provenance-coverage.d.ts → cli/provenance-coverage.d.ts} +1 -1
- package/dist/cli/quality-repair-once.js +4 -4
- package/dist/{quality-repair.js → cli/quality-repair.js} +23 -37
- package/dist/cli/recall.d.ts +2 -4
- package/dist/cli/recall.js +101 -150
- package/dist/{refine-llm.d.ts → cli/refine-llm.d.ts} +1 -1
- package/dist/{refine-llm.js → cli/refine-llm.js} +70 -82
- package/dist/cli/remember.d.ts +1 -3
- package/dist/cli/remember.js +124 -103
- package/dist/{scheduler.d.ts → cli/scheduler.d.ts} +3 -1
- package/dist/{scheduler.js → cli/scheduler.js} +13 -7
- package/dist/cli/serve.d.ts +1 -1
- package/dist/cli/serve.js +34 -4
- package/dist/cli/session-hooks.d.ts +4 -4
- package/dist/cli/session-hooks.js +190 -184
- package/dist/cli/setup.d.ts +2 -1
- package/dist/cli/setup.js +41 -21
- package/dist/cli/shared.d.ts +5 -95
- package/dist/cli/shared.js +18 -369
- package/dist/cli/slack.d.ts +2 -1
- package/dist/cli/slack.js +31 -55
- package/dist/cli/sleep-render.d.ts +4 -0
- package/dist/cli/sleep-render.js +61 -0
- package/dist/cli/sleep.d.ts +2 -8
- package/dist/cli/sleep.js +20 -76
- package/dist/cli/status.d.ts +3 -3
- package/dist/cli/status.js +39 -41
- package/dist/{stdin.js → cli/stdin.js} +6 -6
- package/dist/cli/transfer.d.ts +4 -4
- package/dist/cli/transfer.js +68 -42
- package/dist/cli/usage.js +4 -2
- package/dist/cli.d.ts +289 -5
- package/dist/cli.js +184 -117
- package/dist/connectors/dlq.d.ts +44 -0
- package/dist/connectors/dlq.js +30 -0
- package/dist/connectors/github/backfill.d.ts +1 -1
- package/dist/connectors/github/backfill.js +29 -66
- package/dist/connectors/github/cli-impl.js +59 -74
- package/dist/connectors/github/deletion.d.ts +5 -6
- package/dist/connectors/github/deletion.js +18 -52
- package/dist/connectors/github/dlq.d.ts +7 -61
- package/dist/connectors/github/dlq.js +19 -119
- package/dist/connectors/github/ingest.d.ts +2 -31
- package/dist/connectors/github/ingest.js +20 -83
- package/dist/connectors/github/octokit-client.d.ts +1 -1
- package/dist/connectors/github/octokit-client.js +2 -1
- package/dist/connectors/github/tenant-routing.d.ts +2 -2
- package/dist/connectors/github/tenant-routing.js +10 -36
- package/dist/connectors/github/transform.d.ts +1 -1
- package/dist/connectors/github/types.d.ts +1 -1
- package/dist/connectors/github/types.js +15 -18
- package/dist/connectors/github/webhook.d.ts +3 -2
- package/dist/connectors/github/webhook.js +84 -87
- package/dist/connectors/slack/backfill.d.ts +1 -1
- package/dist/connectors/slack/backfill.js +5 -29
- package/dist/connectors/slack/deletion.d.ts +4 -7
- package/dist/connectors/slack/deletion.js +20 -49
- package/dist/connectors/slack/dlq.d.ts +7 -49
- package/dist/connectors/slack/dlq.js +25 -118
- package/dist/connectors/slack/ingest.d.ts +5 -18
- package/dist/connectors/slack/ingest.js +27 -91
- package/dist/connectors/slack/signature.js +2 -1
- package/dist/connectors/slack/tenant-routing.d.ts +4 -1
- package/dist/connectors/slack/tenant-routing.js +13 -14
- package/dist/connectors/slack/transform.d.ts +1 -1
- package/dist/connectors/slack/types.d.ts +1 -1
- package/dist/connectors/slack/types.js +3 -12
- package/dist/connectors/slack/web-client.js +2 -2
- package/dist/connectors/slack/webhook.d.ts +3 -2
- package/dist/connectors/slack/webhook.js +75 -82
- package/dist/connectors/slack/workspaces.d.ts +4 -17
- package/dist/connectors/slack/workspaces.js +4 -34
- package/dist/consolidate/conflicts.d.ts +1 -1
- package/dist/consolidate/conflicts.js +4 -4
- package/dist/{dag.d.ts → consolidate/dag.d.ts} +1 -1
- package/dist/{dag.js → consolidate/dag.js} +60 -81
- package/dist/consolidate/decay.d.ts +2 -2
- package/dist/consolidate/decay.js +28 -22
- package/dist/{dedupe.js → consolidate/dedupe.js} +11 -19
- package/dist/consolidate/flush-units.d.ts +2 -2
- package/dist/{half-life-migration.d.ts → consolidate/half-life-migration.d.ts} +3 -9
- package/dist/consolidate/half-life-migration.js +106 -0
- package/dist/consolidate/llm-passes.js +8 -8
- package/dist/{memory-value.d.ts → consolidate/memory-value.d.ts} +7 -2
- package/dist/{memory-value.js → consolidate/memory-value.js} +9 -7
- package/dist/consolidate/merge.js +57 -54
- package/dist/{merged-row.d.ts → consolidate/merged-row.d.ts} +1 -1
- package/dist/{merged-row.js → consolidate/merged-row.js} +2 -2
- package/dist/consolidate/physics-pass.js +46 -46
- package/dist/{replay.d.ts → consolidate/replay.d.ts} +1 -1
- package/dist/{replay.js → consolidate/replay.js} +2 -2
- package/dist/consolidate/run.d.ts +7 -13
- package/dist/consolidate/run.js +6 -37
- package/dist/consolidate/sleep.d.ts +1 -1
- package/dist/consolidate/sleep.js +64 -134
- package/dist/{trace.js → consolidate/trace.js} +4 -6
- package/dist/consolidate/traces.js +34 -29
- package/dist/{ablation.js → core/ablation.js} +1 -1
- package/dist/{agent-memories/tools.d.ts → core/agent-memory-tools.d.ts} +1 -1
- package/dist/{agent-memories/tools.js → core/agent-memory-tools.js} +1 -1
- package/dist/{ambient.js → core/ambient.js} +12 -10
- package/dist/{capture-contract.d.ts → core/capture-contract.d.ts} +13 -2
- package/dist/{capture-contract.js → core/capture-contract.js} +64 -0
- package/dist/{compare.d.ts → core/compare.d.ts} +2 -0
- package/dist/{compare.js → core/compare.js} +10 -3
- package/dist/{config.d.ts → core/config.d.ts} +6 -6
- package/dist/{config.js → core/config.js} +99 -72
- package/dist/core/handoff.js +87 -0
- package/dist/{memory-quality.js → core/memory-quality.js} +1 -1
- package/dist/{memory.d.ts → core/memory.d.ts} +17 -5
- package/dist/{memory.js → core/memory.js} +110 -82
- package/dist/{physics.d.ts → core/physics.d.ts} +1 -1
- package/dist/{physics.js → core/physics.js} +2 -1
- package/dist/{project-identity.d.ts → core/project-identity.d.ts} +0 -5
- package/dist/{project-identity.js → core/project-identity.js} +5 -17
- package/dist/{project-remote.js → core/project-remote.js} +4 -4
- package/dist/{prompt-recall.js → core/prompt-recall.js} +1 -1
- package/dist/{salience.js → core/salience.js} +35 -20
- package/dist/{search/types.d.ts → core/search-types.d.ts} +2 -2
- package/dist/{search/types.js → core/search-types.js} +1 -1
- package/dist/core/session-digest-row.d.ts +5 -0
- package/dist/core/session-digest-row.js +6 -0
- package/dist/{dashboard-actions.d.ts → dashboard/dashboard-actions.d.ts} +1 -1
- package/dist/{dashboard-actions.js → dashboard/dashboard-actions.js} +5 -5
- package/dist/{dashboard-queries.d.ts → dashboard/dashboard-queries.d.ts} +7 -2
- package/dist/{dashboard-queries.js → dashboard/dashboard-queries.js} +6 -10
- package/dist/{dashboard-snapshot.d.ts → dashboard/dashboard-snapshot.d.ts} +9 -9
- package/dist/{dashboard-snapshot.js → dashboard/dashboard-snapshot.js} +101 -104
- package/dist/{dashboard.js → dashboard/dashboard.js} +124 -53
- package/dist/db/backup.js +1 -1
- package/dist/db/busy.d.ts +18 -1
- package/dist/db/busy.js +74 -9
- package/dist/db/connect.d.ts +10 -2
- package/dist/db/connect.js +43 -10
- package/dist/db/index.d.ts +9 -0
- package/dist/db/index.js +8 -0
- package/dist/db/meta.d.ts +4 -0
- package/dist/db/meta.js +11 -1
- package/dist/db/migrate.d.ts +8 -1
- package/dist/db/migrate.js +25 -30
- package/dist/db/migrations/v08.js +1 -1
- package/dist/db/migrations/v14.js +39 -35
- package/dist/db/migrations/v16.js +29 -26
- package/dist/db/migrations/v18.js +6 -5
- package/dist/db/migrations/v20.js +4 -2
- package/dist/db/migrations/v22.js +39 -36
- package/dist/db/migrations/v24.js +27 -22
- package/dist/db/migrations/v29.js +37 -32
- package/dist/db/migrations/v31.js +36 -31
- package/dist/db/migrations/v35.js +1 -1
- package/dist/db/migrations/v39.js +1 -1
- package/dist/db/migrations/v40.js +15 -14
- package/dist/db/migrations/v43.js +7 -6
- package/dist/db/migrations/v44.js +1 -1
- package/dist/db/migrations/v45.js +1 -1
- package/dist/db/migrations/v46.js +1 -1
- package/dist/db/migrations/v47.js +1 -1
- package/dist/db/migrations/v48.js +1 -1
- package/dist/db/migrations/v49.js +1 -1
- package/dist/db/migrations/v50.js +8 -7
- package/dist/db/migrations/v52.js +1 -1
- package/dist/db/open.d.ts +9 -1
- package/dist/db/open.js +21 -4
- package/dist/{physics-state.d.ts → db/physics-state.d.ts} +3 -3
- package/dist/{physics-state.js → db/physics-state.js} +9 -16
- package/dist/{raw-archive-mirror-cleanup.d.ts → db/raw-archive-mirror-cleanup.d.ts} +5 -5
- package/dist/{raw-archive-mirror-cleanup.js → db/raw-archive-mirror-cleanup.js} +11 -6
- package/dist/db/request-stores.d.ts +15 -2
- package/dist/db/request-stores.js +37 -15
- package/dist/db/tables.d.ts +2 -0
- package/dist/db/tables.js +6 -0
- package/dist/{vector-store.d.ts → db/vector-store.d.ts} +4 -2
- package/dist/{vector-store.js → db/vector-store.js} +76 -51
- package/dist/db/wal-checkpointer.d.ts +11 -0
- package/dist/db/wal-checkpointer.js +92 -0
- package/dist/doctor.js +105 -136
- package/dist/entry/json-hooks.d.ts +1 -1
- package/dist/entry/json-hooks.js +1 -1
- package/dist/entry/project-identity.d.ts +1 -1
- package/dist/entry/project-identity.js +1 -1
- package/dist/entry/session-text.d.ts +3 -3
- package/dist/entry/session-text.js +3 -3
- package/dist/{eval-stats.js → eval/eval-stats.js} +12 -9
- package/dist/{eval-suite.d.ts → eval/eval-suite.d.ts} +1 -1
- package/dist/{eval-suite.js → eval/eval-suite.js} +25 -23
- package/dist/{eval.d.ts → eval/eval.d.ts} +1 -1
- package/dist/{eval.js → eval/eval.js} +29 -22
- package/dist/{judgment.d.ts → eval/judgment.d.ts} +1 -3
- package/dist/{judgment.js → eval/judgment.js} +4 -9
- package/dist/extensions/openclaw-plugin/index.js +1 -2
- package/dist/graph/delta.d.ts +3 -2
- package/dist/graph/delta.js +9 -23
- package/dist/{graph-extract.d.ts → graph/extract.d.ts} +6 -6
- package/dist/{graph-extract.js → graph/extract.js} +37 -52
- package/dist/{graph-recall.d.ts → graph/recall.d.ts} +2 -2
- package/dist/{graph-recall.js → graph/recall.js} +55 -36
- package/dist/{graph-stream.d.ts → graph/stream.d.ts} +2 -2
- package/dist/{graph-stream.js → graph/stream.js} +9 -7
- package/dist/{graph-view.d.ts → graph/view.d.ts} +6 -3
- package/dist/{graph-view.js → graph/view.js} +127 -167
- package/dist/graph/write.d.ts +4 -76
- package/dist/graph/write.js +13 -397
- package/dist/hooks/codex-session.js +1 -1
- package/dist/hooks/codex-wrapper.js +14 -15
- package/dist/hooks/copilot.d.ts +1 -8
- package/dist/hooks/copilot.js +14 -15
- package/dist/{cli → hooks}/hook-blocks.js +1 -1
- package/dist/hooks/json-hooks.d.ts +1 -1
- package/dist/hooks/json-hooks.js +31 -122
- package/dist/hooks/opencode.js +35 -27
- package/dist/hooks/shared.d.ts +0 -4
- package/dist/hooks/shared.js +1 -5
- package/dist/importers/core.d.ts +2 -6
- package/dist/importers/core.js +41 -39
- package/dist/importers/markdown-parse.d.ts +1 -10
- package/dist/importers/markdown-parse.js +2 -19
- package/dist/importers/markdown.js +2 -1
- package/dist/importers/sources.js +50 -46
- package/dist/importers/vault.js +71 -92
- package/dist/index.d.ts +22 -22
- package/dist/index.js +21 -21
- package/dist/{autolearn.d.ts → learn/autolearn.d.ts} +2 -2
- package/dist/{autolearn.js → learn/autolearn.js} +13 -11
- package/dist/{churn-git.d.ts → learn/churn-git.d.ts} +1 -1
- package/dist/{churn-git.js → learn/churn-git.js} +6 -4
- package/dist/{extract.d.ts → learn/extract.d.ts} +1 -1
- package/dist/learn/extract.js +125 -0
- package/dist/{forward-claim-detector.d.ts → learn/forward-claim-detector.d.ts} +1 -1
- package/dist/{forward-claim-detector.js → learn/forward-claim-detector.js} +1 -1
- package/dist/{invalidation.d.ts → learn/invalidation.d.ts} +4 -0
- package/dist/{invalidation.js → learn/invalidation.js} +83 -99
- package/dist/mcp/admin-tools.d.ts +1 -1
- package/dist/mcp/admin-tools.js +37 -60
- package/dist/mcp/format.d.ts +5 -5
- package/dist/mcp/format.js +7 -6
- package/dist/mcp/framing.d.ts +6 -0
- package/dist/mcp/framing.js +11 -3
- package/dist/mcp/memory-tools.js +7 -27
- package/dist/mcp/protocol.d.ts +6 -10
- package/dist/mcp/protocol.js +8 -14
- package/dist/mcp/recall-tools.d.ts +2 -2
- package/dist/mcp/recall-tools.js +68 -50
- package/dist/mcp/request.js +62 -60
- package/dist/mcp/server.js +1 -1
- package/dist/mcp/session-state.d.ts +1 -2
- package/dist/mcp/session-state.js +2 -2
- package/dist/mcp/shared-gate.js +1 -1
- package/dist/mcp/stdio.js +69 -31
- package/dist/mcp/tool-args.js +2 -1
- package/dist/mcp/tools.js +2 -2
- package/dist/{customer-notes.d.ts → objects/customer-notes.d.ts} +7 -24
- package/dist/objects/customer-notes.js +112 -0
- package/dist/{decisions.d.ts → objects/decisions.d.ts} +13 -28
- package/dist/objects/decisions.js +101 -0
- package/dist/objects/descriptor.d.ts +52 -0
- package/dist/objects/descriptor.js +4 -0
- package/dist/objects/fields.d.ts +15 -0
- package/dist/objects/fields.js +21 -0
- package/dist/{incidents.d.ts → objects/incidents.d.ts} +17 -44
- package/dist/objects/incidents.js +130 -0
- package/dist/objects/lifecycle.d.ts +27 -0
- package/dist/objects/lifecycle.js +96 -0
- package/dist/{policies.d.ts → objects/policies.d.ts} +14 -27
- package/dist/objects/policies.js +189 -0
- package/dist/{processes.d.ts → objects/processes.d.ts} +14 -34
- package/dist/objects/processes.js +146 -0
- package/dist/{project-briefs.d.ts → objects/project-briefs.d.ts} +19 -40
- package/dist/objects/project-briefs.js +255 -0
- package/dist/{skills.d.ts → objects/skills.d.ts} +11 -26
- package/dist/objects/skills.js +156 -0
- package/dist/postinstall.js +4 -2
- package/dist/predictions/planning-fallacy.d.ts +4 -76
- package/dist/predictions/planning-fallacy.js +4 -129
- package/dist/rerankers/clef.d.ts +2 -6
- package/dist/rerankers/clef.js +27 -47
- package/dist/rerankers/cross-encoder.d.ts +0 -7
- package/dist/rerankers/cross-encoder.js +15 -23
- package/dist/rerankers/index.js +8 -7
- package/dist/rerankers/jev.d.ts +1 -4
- package/dist/rerankers/jev.js +30 -49
- package/dist/rerankers/llm.d.ts +2 -4
- package/dist/rerankers/llm.js +33 -50
- package/dist/rerankers/outage-warning.d.ts +7 -0
- package/dist/rerankers/outage-warning.js +31 -0
- package/dist/rerankers/remote.d.ts +3 -0
- package/dist/rerankers/remote.js +23 -0
- package/dist/rerankers/types.d.ts +1 -1
- package/dist/search/as-of.d.ts +1 -1
- package/dist/search/bm25-search.d.ts +2 -2
- package/dist/search/bm25-search.js +7 -7
- package/dist/search/bm25.d.ts +1 -1
- package/dist/search/bm25.js +1 -1
- package/dist/search/boosts.d.ts +5 -1
- package/dist/search/boosts.js +34 -13
- package/dist/search/breakdown.d.ts +2 -2
- package/dist/search/breakdown.js +2 -1
- package/dist/search/explain.d.ts +1 -1
- package/dist/search/explain.js +3 -2
- package/dist/search/finalize.d.ts +2 -2
- package/dist/search/finalize.js +4 -3
- package/dist/search/fusion.d.ts +1 -1
- package/dist/search/fusion.js +3 -3
- package/dist/search/hybrid-score.d.ts +2 -2
- package/dist/search/hybrid-score.js +1 -1
- package/dist/search/hybrid.d.ts +4 -4
- package/dist/search/hybrid.js +11 -8
- package/dist/{multihop.d.ts → search/multihop.d.ts} +2 -2
- package/dist/{multihop.js → search/multihop.js} +7 -5
- package/dist/{path-context.js → search/path-context.js} +3 -1
- package/dist/search/physics-search.d.ts +4 -4
- package/dist/search/physics-search.js +15 -15
- package/dist/search/rerank.d.ts +3 -3
- package/dist/search/rerank.js +4 -3
- package/dist/search/temporal.d.ts +1 -1
- package/dist/search/temporal.js +5 -2
- package/dist/search/vector.d.ts +3 -3
- package/dist/search/vector.js +17 -11
- package/dist/server/auth.d.ts +1 -1
- package/dist/server/auth.js +26 -18
- package/dist/server/boot.d.ts +24 -0
- package/dist/server/boot.js +465 -0
- package/dist/server/client-ip.d.ts +5 -1
- package/dist/server/client-ip.js +18 -6
- package/dist/server/cursor.d.ts +1 -1
- package/dist/server/cursor.js +2 -3
- package/dist/server/deadline.d.ts +13 -0
- package/dist/server/deadline.js +45 -0
- package/dist/server/key-check-bounds.d.ts +8 -0
- package/dist/server/key-check-bounds.js +46 -0
- package/dist/server/lifecycle.js +1 -1
- package/dist/server/mcp-http.d.ts +1 -4
- package/dist/server/mcp-http.js +34 -24
- package/dist/server/ready.d.ts +7 -0
- package/dist/server/ready.js +38 -0
- package/dist/server/request.d.ts +10 -4
- package/dist/server/request.js +63 -12
- package/dist/server/route-table.d.ts +15 -0
- package/dist/server/route-table.js +209 -0
- package/dist/server/routes/admin.js +13 -8
- package/dist/server/routes/customer-notes.d.ts +5 -5
- package/dist/server/routes/customer-notes.js +32 -97
- package/dist/server/routes/decisions.d.ts +5 -5
- package/dist/server/routes/decisions.js +42 -105
- package/dist/server/routes/incidents.d.ts +5 -5
- package/dist/server/routes/incidents.js +42 -95
- package/dist/server/routes/memories.js +12 -14
- package/dist/server/routes/object-routes.d.ts +40 -0
- package/dist/server/routes/object-routes.js +80 -0
- package/dist/server/routes/policies.d.ts +6 -6
- package/dist/server/routes/policies.js +40 -124
- package/dist/server/routes/predictions.js +29 -45
- package/dist/server/routes/processes.d.ts +5 -5
- package/dist/server/routes/processes.js +38 -118
- package/dist/server/routes/project-briefs.d.ts +6 -6
- package/dist/server/routes/project-briefs.js +38 -110
- package/dist/server/routes/recall.js +14 -12
- package/dist/server/routes/skills.d.ts +6 -6
- package/dist/server/routes/skills.js +37 -125
- package/dist/{server-detect.js → server/server-detect.js} +1 -1
- package/dist/server/sleep-child.d.ts +2 -0
- package/dist/server/sleep-child.js +19 -0
- package/dist/server/sleep-offload.d.ts +20 -0
- package/dist/server/sleep-offload.js +70 -0
- package/dist/server/tls.d.ts +6 -0
- package/dist/server/tls.js +24 -0
- package/dist/server/types.d.ts +27 -8
- package/dist/server/validation.d.ts +3 -4
- package/dist/server/validation.js +6 -11
- package/dist/server.d.ts +39 -61
- package/dist/server.js +24 -568
- package/dist/{project-merge.d.ts → sharing/project-merge.d.ts} +1 -1
- package/dist/{project-merge.js → sharing/project-merge.js} +26 -45
- package/dist/{scope.js → sharing/scope.js} +1 -1
- package/dist/{shared.d.ts → sharing/shared.d.ts} +10 -9
- package/dist/{shared.js → sharing/shared.js} +100 -77
- package/dist/{ambient-store.d.ts → store/ambient.d.ts} +2 -2
- package/dist/{ambient-store.js → store/ambient.js} +10 -10
- package/dist/store/audit-event.d.ts +11 -5
- package/dist/store/audit-event.js +5 -4
- package/dist/{audit.d.ts → store/audit.d.ts} +27 -3
- package/dist/{audit.js → store/audit.js} +91 -6
- package/dist/{auth.d.ts → store/auth.d.ts} +15 -32
- package/dist/{auth.js → store/auth.js} +100 -92
- package/dist/store/candidates.d.ts +23 -12
- package/dist/store/candidates.js +87 -35
- package/dist/{card-detail.d.ts → store/card-detail.d.ts} +3 -3
- package/dist/{card-detail.js → store/card-detail.js} +1 -1
- package/dist/{store-cards.d.ts → store/cards.d.ts} +14 -9
- package/dist/{store-cards.js → store/cards.js} +85 -146
- package/dist/store/compactions.d.ts +78 -0
- package/dist/store/compactions.js +93 -0
- package/dist/store/conflicts.d.ts +22 -5
- package/dist/store/conflicts.js +160 -109
- package/dist/store/connectors/github.d.ts +84 -0
- package/dist/store/connectors/github.js +180 -0
- package/dist/store/connectors/slack.d.ts +69 -0
- package/dist/store/connectors/slack.js +177 -0
- package/dist/store/dashboard-reads.d.ts +27 -0
- package/dist/store/dashboard-reads.js +92 -0
- package/dist/store/delete-and-batch.d.ts +20 -24
- package/dist/store/delete-and-batch.js +64 -40
- package/dist/{delivery-recorder.d.ts → store/delivery-recorder.d.ts} +12 -5
- package/dist/{delivery-recorder.js → store/delivery-recorder.js} +42 -30
- package/dist/store/descendant-page.d.ts +12 -0
- package/dist/store/descendant-page.js +99 -0
- package/dist/store/diagnostics.d.ts +47 -0
- package/dist/store/diagnostics.js +51 -0
- package/dist/store/doctor-reads.d.ts +16 -0
- package/dist/store/doctor-reads.js +19 -0
- package/dist/{dormant.d.ts → store/dormant.d.ts} +46 -12
- package/dist/{dormant.js → store/dormant.js} +151 -6
- package/dist/{embeddings.d.ts → store/embeddings/index.d.ts} +10 -6
- package/dist/{embeddings.js → store/embeddings/index.js} +60 -44
- package/dist/{local-embedding.d.ts → store/embeddings/local.d.ts} +1 -1
- package/dist/{local-embedding.js → store/embeddings/local.js} +68 -57
- package/dist/{embedding-provider.d.ts → store/embeddings/provider.d.ts} +2 -2
- package/dist/{embedding-provider.js → store/embeddings/provider.js} +47 -32
- package/dist/store/entry-reads.d.ts +46 -7
- package/dist/store/entry-reads.js +120 -21
- package/dist/store/entry-row.d.ts +8 -2
- package/dist/store/entry-row.js +28 -8
- package/dist/store/entry-writes.d.ts +33 -4
- package/dist/store/entry-writes.js +108 -26
- package/dist/{failure-log.d.ts → store/failure-log.d.ts} +7 -2
- package/dist/{failure-log.js → store/failure-log.js} +9 -2
- package/dist/{goals.d.ts → store/goals.d.ts} +6 -46
- package/dist/{goals.js → store/goals.js} +45 -94
- package/dist/store/graph-queue.d.ts +29 -0
- package/dist/store/graph-queue.js +101 -0
- package/dist/{graph/read.d.ts → store/graph-reads.d.ts} +26 -34
- package/dist/{graph/read.js → store/graph-reads.js} +63 -115
- package/dist/{graph/types.d.ts → store/graph-rows.d.ts} +68 -8
- package/dist/{graph/rows.js → store/graph-rows.js} +14 -3
- package/dist/store/graph-view-rows.d.ts +12 -0
- package/dist/store/graph-view-rows.js +67 -0
- package/dist/store/graph-writes.d.ts +58 -0
- package/dist/store/graph-writes.js +256 -0
- package/dist/store/half-life.d.ts +34 -0
- package/dist/store/half-life.js +77 -0
- package/dist/store/handoffs.d.ts +1 -1
- package/dist/store/handoffs.js +39 -30
- package/dist/store/index-and-stats.d.ts +8 -1
- package/dist/store/index-and-stats.js +51 -48
- package/dist/store/index.d.ts +4 -0
- package/dist/store/index.js +3 -0
- package/dist/store/key-audit.d.ts +2 -2
- package/dist/store/key-audit.js +4 -4
- package/dist/store/key-writes.d.ts +12 -5
- package/dist/store/key-writes.js +30 -4
- package/dist/store/ledger-turn.d.ts +17 -0
- package/dist/store/ledger-turn.js +27 -0
- package/dist/store/markdown.d.ts +1 -1
- package/dist/store/markdown.js +4 -3
- package/dist/store/mirrors.d.ts +5 -7
- package/dist/store/mirrors.js +39 -25
- package/dist/store/object-types.d.ts +189 -0
- package/dist/store/object-types.js +4 -0
- package/dist/store/open.d.ts +6 -4
- package/dist/store/open.js +24 -23
- package/dist/store/planning-fallacy-evidence.d.ts +42 -0
- package/dist/store/planning-fallacy-evidence.js +81 -0
- package/dist/store/port.d.ts +646 -0
- package/dist/store/port.js +17 -0
- package/dist/{predictions/store.d.ts → store/predictions.d.ts} +15 -2
- package/dist/{predictions/store.js → store/predictions.js} +52 -67
- package/dist/{quarantine.d.ts → store/quarantine.d.ts} +8 -8
- package/dist/{quarantine.js → store/quarantine.js} +64 -22
- package/dist/{raw-archive.d.ts → store/raw-archive.d.ts} +3 -1
- package/dist/{raw-archive.js → store/raw-archive.js} +6 -2
- package/dist/{recall-scope.d.ts → store/recall-scope.d.ts} +2 -2
- package/dist/{recall-scope.js → store/recall-scope.js} +3 -3
- package/dist/{recall-trace.d.ts → store/recall-trace.d.ts} +13 -14
- package/dist/{recall-trace.js → store/recall-trace.js} +38 -43
- package/dist/store/rejected-values.d.ts +55 -0
- package/dist/store/rejected-values.js +162 -0
- package/dist/{rejection.d.ts → store/rejection.d.ts} +2 -2
- package/dist/{rejection.js → store/rejection.js} +3 -2
- package/dist/store/rows.d.ts +2 -3
- package/dist/store/rows.js +18 -11
- package/dist/store/search-rows.d.ts +15 -4
- package/dist/store/search-rows.js +41 -28
- package/dist/store/sessions.d.ts +13 -2
- package/dist/store/sessions.js +79 -45
- package/dist/store/sqlite/commit-watch.d.ts +4 -0
- package/dist/store/sqlite/commit-watch.js +29 -0
- package/dist/store/sqlite/connector-events-group.d.ts +5 -0
- package/dist/store/sqlite/connector-events-group.js +50 -0
- package/dist/store/sqlite/connector-writes-group.d.ts +6 -0
- package/dist/store/sqlite/connector-writes-group.js +65 -0
- package/dist/store/sqlite/dag-reads-group.d.ts +3 -0
- package/dist/store/sqlite/dag-reads-group.js +45 -0
- package/dist/store/sqlite/entry-writes-group.d.ts +18 -0
- package/dist/store/{entry-writes-group.js → sqlite/entry-writes-group.js} +73 -60
- package/dist/store/sqlite/error-codec.d.ts +17 -0
- package/dist/store/sqlite/error-codec.js +59 -0
- package/dist/store/sqlite/executor-counts.d.ts +10 -0
- package/dist/store/sqlite/executor-counts.js +11 -0
- package/dist/store/sqlite/executor.d.ts +28 -0
- package/dist/store/sqlite/executor.js +286 -0
- package/dist/store/sqlite/graph-reads-group.d.ts +5 -0
- package/dist/store/sqlite/graph-reads-group.js +18 -0
- package/dist/store/sqlite/local.d.ts +21 -0
- package/dist/store/sqlite/local.js +38 -0
- package/dist/store/sqlite/object-rows.d.ts +102 -0
- package/dist/store/sqlite/object-rows.js +218 -0
- package/dist/store/sqlite/objects-group.d.ts +20 -0
- package/dist/store/sqlite/objects-group.js +314 -0
- package/dist/store/sqlite/predictions-group.d.ts +5 -0
- package/dist/store/sqlite/predictions-group.js +28 -0
- package/dist/store/sqlite/quarantine-group.d.ts +5 -0
- package/dist/store/sqlite/quarantine-group.js +38 -0
- package/dist/store/sqlite/store.d.ts +26 -0
- package/dist/store/sqlite/store.js +295 -0
- package/dist/store/sqlite/vector-pack.d.ts +18 -0
- package/dist/store/sqlite/vector-pack.js +46 -0
- package/dist/store/sqlite/vector-reads-group.d.ts +3 -0
- package/dist/store/sqlite/vector-reads-group.js +23 -0
- package/dist/store/sqlite/worker-entry.d.ts +2 -0
- package/dist/store/sqlite/worker-entry.js +8 -0
- package/dist/store/sqlite/worker-jobs.d.ts +5 -0
- package/dist/store/sqlite/worker-jobs.js +116 -0
- package/dist/store/sqlite/worker-ops.d.ts +124 -0
- package/dist/store/sqlite/worker-ops.js +82 -0
- package/dist/store/sqlite/worker-store.d.ts +8 -0
- package/dist/store/sqlite/worker-store.js +76 -0
- package/dist/store/summaries.d.ts +2 -11
- package/dist/store/summaries.js +17 -44
- package/dist/{summary-dirty.d.ts → store/summary-dirty.d.ts} +1 -1
- package/dist/store/tenant-lookup.d.ts +1 -1
- package/dist/{tenant.d.ts → store/tenant.d.ts} +2 -2
- package/dist/{tenant.js → store/tenant.js} +1 -1
- package/dist/store/token-ledger-rows.d.ts +61 -0
- package/dist/store/token-ledger-rows.js +68 -0
- package/dist/{token-ledger.d.ts → store/token-ledger.d.ts} +2 -9
- package/dist/{token-ledger.js → store/token-ledger.js} +31 -78
- package/dist/store/tombstone-checks.d.ts +12 -0
- package/dist/store/tombstone-checks.js +31 -0
- package/dist/store/usage-reports.d.ts +7 -0
- package/dist/store/usage-reports.js +26 -0
- package/dist/store/vector-writes.d.ts +10 -3
- package/dist/store/vector-writes.js +35 -5
- package/dist/{working-memory.d.ts → store/working-memory.d.ts} +5 -1
- package/dist/{working-memory.js → store/working-memory.js} +39 -41
- package/dist/support-bundle.d.ts +1 -1
- package/dist/support-bundle.js +13 -33
- package/dist/{gated-write.d.ts → trust/gated-write.d.ts} +2 -2
- package/dist/{gated-write.js → trust/gated-write.js} +6 -6
- package/dist/trust/quarantine.d.ts +4 -0
- package/dist/trust/quarantine.js +8 -0
- package/dist/trust/reject-flow.d.ts +23 -0
- package/dist/trust/reject-flow.js +67 -0
- package/dist/util/anthropic-messages.d.ts +31 -0
- package/dist/util/anthropic-messages.js +46 -0
- package/dist/util/atomic-write.d.ts +3 -0
- package/dist/util/atomic-write.js +107 -0
- package/dist/util/crash-handlers.d.ts +5 -0
- package/dist/util/crash-handlers.js +30 -0
- package/dist/{env.d.ts → util/env.d.ts} +15 -2
- package/dist/{env.js → util/env.js} +20 -2
- package/dist/util/home-path.js +67 -0
- package/dist/{http-retry.d.ts → util/http-retry.d.ts} +6 -2
- package/dist/{http-retry.js → util/http-retry.js} +38 -7
- package/dist/{http-util.d.ts → util/http-util.d.ts} +14 -3
- package/dist/{http-util.js → util/http-util.js} +31 -11
- package/dist/util/json.d.ts +17 -0
- package/dist/util/json.js +25 -0
- package/dist/{log.d.ts → util/log.d.ts} +5 -2
- package/dist/{log.js → util/log.js} +12 -3
- package/dist/util/real-path.d.ts +3 -0
- package/dist/util/real-path.js +15 -0
- package/dist/util/request-scope.d.ts +27 -0
- package/dist/util/request-scope.js +47 -0
- package/dist/{same-text.d.ts → util/same-text.d.ts} +1 -1
- package/dist/{secret-detect.js → util/secret-detect.js} +5 -4
- package/dist/util/stored-json.d.ts +9 -0
- package/dist/util/stored-json.js +8 -0
- package/dist/util/time.d.ts +2 -0
- package/dist/util/time.js +3 -0
- package/dist/util/token-text.d.ts +18 -0
- package/dist/util/token-text.js +23 -0
- package/dist/{version.d.ts → util/version.d.ts} +1 -1
- package/dist/{version.js → util/version.js} +1 -1
- package/extensions/openclaw-plugin/index.ts +1 -5
- package/extensions/openclaw-plugin/openclaw.plugin.json +1 -1
- package/extensions/openclaw-plugin/package.json +1 -1
- package/openclaw.plugin.json +1 -1
- package/package.json +2 -2
- package/dist/api.d.ts +0 -26
- package/dist/api.js +0 -29
- package/dist/connectors/github/idempotency.d.ts +0 -19
- package/dist/connectors/github/idempotency.js +0 -27
- package/dist/connectors/slack/idempotency.d.ts +0 -17
- package/dist/connectors/slack/idempotency.js +0 -31
- package/dist/customer-notes.js +0 -336
- package/dist/db.d.ts +0 -9
- package/dist/db.js +0 -8
- package/dist/decisions.js +0 -326
- package/dist/extract.js +0 -133
- package/dist/graph/rows.d.ts +0 -45
- package/dist/graph/types.js +0 -11
- package/dist/half-life-migration.js +0 -182
- package/dist/handoff.js +0 -68
- package/dist/home-path.js +0 -24
- package/dist/incidents.js +0 -349
- package/dist/instruction-detect.js +0 -27
- package/dist/json.d.ts +0 -7
- package/dist/json.js +0 -11
- package/dist/ledger-db.d.ts +0 -10
- package/dist/ledger-db.js +0 -42
- package/dist/policies.js +0 -434
- package/dist/processes.js +0 -371
- package/dist/project-briefs.js +0 -523
- package/dist/reject-flow.d.ts +0 -69
- package/dist/reject-flow.js +0 -260
- package/dist/session-owners.d.ts +0 -7
- package/dist/session-owners.js +0 -54
- package/dist/skills.js +0 -367
- package/dist/store/entry-writes-group.d.ts +0 -9
- package/dist/store-port.d.ts +0 -262
- package/dist/store-port.js +0 -178
- /package/dist/{context-auto.d.ts → api/context-auto.d.ts} +0 -0
- /package/dist/{instruction-detect.d.ts → api/instruction-detect.d.ts} +0 -0
- /package/dist/{recall-history.d.ts → api/recall-history.d.ts} +0 -0
- /package/dist/{codex-patch.d.ts → capture/codex-patch.d.ts} +0 -0
- /package/dist/{compaction-items.d.ts → capture/compaction-items.d.ts} +0 -0
- /package/dist/{compaction-spool.d.ts → capture/compaction-spool.d.ts} +0 -0
- /package/dist/{share-scrub.d.ts → capture/share-scrub.d.ts} +0 -0
- /package/dist/{correction-latency.js → cli/correction-latency.js} +0 -0
- /package/dist/{provenance-coverage.js → cli/provenance-coverage.js} +0 -0
- /package/dist/{quality-repair.d.ts → cli/quality-repair.d.ts} +0 -0
- /package/dist/{stdin.d.ts → cli/stdin.d.ts} +0 -0
- /package/dist/{dedupe.d.ts → consolidate/dedupe.d.ts} +0 -0
- /package/dist/{memory-value-weights.d.ts → consolidate/memory-value-weights.d.ts} +0 -0
- /package/dist/{memory-value-weights.js → consolidate/memory-value-weights.js} +0 -0
- /package/dist/{overlap-index.d.ts → consolidate/overlap-index.d.ts} +0 -0
- /package/dist/{overlap-index.js → consolidate/overlap-index.js} +0 -0
- /package/dist/{trace.d.ts → consolidate/trace.d.ts} +0 -0
- /package/dist/{ablation.d.ts → core/ablation.d.ts} +0 -0
- /package/dist/{ambient.d.ts → core/ambient.d.ts} +0 -0
- /package/dist/{api-errors.d.ts → core/api-errors.d.ts} +0 -0
- /package/dist/{api-errors.js → core/api-errors.js} +0 -0
- /package/dist/{card.d.ts → core/card.d.ts} +0 -0
- /package/dist/{card.js → core/card.js} +0 -0
- /package/dist/{handoff.d.ts → core/handoff.d.ts} +0 -0
- /package/dist/{memory-quality.d.ts → core/memory-quality.d.ts} +0 -0
- /package/dist/{physics-config.d.ts → core/physics-config.d.ts} +0 -0
- /package/dist/{physics-config.js → core/physics-config.js} +0 -0
- /package/dist/{project-remote.d.ts → core/project-remote.d.ts} +0 -0
- /package/dist/{prompt-recall.d.ts → core/prompt-recall.d.ts} +0 -0
- /package/dist/{salience.d.ts → core/salience.d.ts} +0 -0
- /package/dist/{dashboard-params.d.ts → dashboard/dashboard-params.d.ts} +0 -0
- /package/dist/{dashboard-params.js → dashboard/dashboard-params.js} +0 -0
- /package/dist/{dashboard-types.d.ts → dashboard/dashboard-types.d.ts} +0 -0
- /package/dist/{dashboard-types.js → dashboard/dashboard-types.js} +0 -0
- /package/dist/{dashboard.d.ts → dashboard/dashboard.d.ts} +0 -0
- /package/dist/{eval-stats.d.ts → eval/eval-stats.d.ts} +0 -0
- /package/dist/{cli → hooks}/hook-blocks.d.ts +0 -0
- /package/dist/{path-context.d.ts → search/path-context.d.ts} +0 -0
- /package/dist/{rrf.d.ts → search/rrf.d.ts} +0 -0
- /package/dist/{rrf.js → search/rrf.js} +0 -0
- /package/dist/{rate-limit.d.ts → server/rate-limit.d.ts} +0 -0
- /package/dist/{rate-limit.js → server/rate-limit.js} +0 -0
- /package/dist/{server-detect.d.ts → server/server-detect.d.ts} +0 -0
- /package/dist/{scope.d.ts → sharing/scope.d.ts} +0 -0
- /package/dist/{summary-dirty.js → store/summary-dirty.js} +0 -0
- /package/dist/{yaml.d.ts → store/yaml.d.ts} +0 -0
- /package/dist/{yaml.js → store/yaml.js} +0 -0
- /package/dist/{escape.d.ts → util/escape.d.ts} +0 -0
- /package/dist/{escape.js → util/escape.js} +0 -0
- /package/dist/{home-path.d.ts → util/home-path.d.ts} +0 -0
- /package/dist/{keyset.d.ts → util/keyset.d.ts} +0 -0
- /package/dist/{keyset.js → util/keyset.js} +0 -0
- /package/dist/{same-text.js → util/same-text.js} +0 -0
- /package/dist/{secret-detect.d.ts → util/secret-detect.d.ts} +0 -0
- /package/dist/{db → util}/sqlite-blocked.d.ts +0 -0
- /package/dist/{db → util}/sqlite-blocked.js +0 -0
- /package/dist/{tokenize.d.ts → util/tokenize.d.ts} +0 -0
- /package/dist/{tokenize.js → util/tokenize.js} +0 -0
- /package/dist/{transcript-tail.d.ts → util/transcript-tail.d.ts} +0 -0
- /package/dist/{transcript-tail.js → util/transcript-tail.js} +0 -0
- /package/dist/{write-budget.d.ts → util/write-budget.d.ts} +0 -0
- /package/dist/{write-budget.js → util/write-budget.js} +0 -0
|
@@ -1,74 +1,12 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { bumpDlqRetry, dlqEntry, listDlqRows, } from '../../store/connectors/github.js';
|
|
2
|
+
import { replayFailed } from '../dlq.js';
|
|
2
3
|
import { verifyGitHubSignature } from './signature.js';
|
|
3
4
|
import { isGitHubWebhookEnvelope } from './types.js';
|
|
4
|
-
|
|
5
|
-
export
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
.prepare(`INSERT INTO github_dlq
|
|
10
|
-
(tenant_id, raw_payload, error, event_name, delivery_id, signature,
|
|
11
|
-
installation_id, repo_full_name, received_at, bucket)
|
|
12
|
-
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`)
|
|
13
|
-
.run(opts.tenantId ?? '__unroutable__', rawPayload, redacted ? `${opts.error}; ${DLQ_REDACTED_NOTE}` : opts.error, opts.eventName ?? null, opts.deliveryId ?? null, redacted ? null : opts.signature ?? null, opts.installationId ?? null, opts.repoFullName ?? null, new Date().toISOString(), opts.bucket ?? 'parse_error');
|
|
14
|
-
return Number(result.lastInsertRowid);
|
|
15
|
-
}
|
|
16
|
-
const SELECT_COLUMNS = `id, tenant_id, raw_payload, error, event_name, delivery_id,
|
|
17
|
-
signature, installation_id, repo_full_name, retry_count,
|
|
18
|
-
received_at, retried_at, bucket`;
|
|
19
|
-
export function listDlq(db, opts) {
|
|
20
|
-
// SAFETY: rows come from the SELECT above (SELECT_COLUMNS), which projects
|
|
21
|
-
// exactly DlqRawRow's fields, in the same order github_dlq defines them.
|
|
22
|
-
const rows = db
|
|
23
|
-
.prepare(`SELECT ${SELECT_COLUMNS}
|
|
24
|
-
FROM github_dlq
|
|
25
|
-
WHERE tenant_id = ?
|
|
26
|
-
ORDER BY received_at ASC
|
|
27
|
-
LIMIT ?`)
|
|
28
|
-
.all(opts.tenantId, opts.limit ?? 100);
|
|
29
|
-
return rows.map(rowToItem);
|
|
30
|
-
}
|
|
31
|
-
export function getDlqEntry(db, id) {
|
|
32
|
-
// SAFETY: the row comes from the SELECT above (SELECT_COLUMNS), which
|
|
33
|
-
// projects exactly DlqRawRow's fields, in the same order github_dlq defines them.
|
|
34
|
-
const row = db
|
|
35
|
-
.prepare(`SELECT ${SELECT_COLUMNS}
|
|
36
|
-
FROM github_dlq
|
|
37
|
-
WHERE id = ?`)
|
|
38
|
-
.get(id);
|
|
39
|
-
if (!row)
|
|
40
|
-
return null;
|
|
41
|
-
return rowToItem(row);
|
|
42
|
-
}
|
|
43
|
-
function rowToItem(r) {
|
|
44
|
-
return {
|
|
45
|
-
id: Number(r.id),
|
|
46
|
-
tenantId: String(r.tenant_id),
|
|
47
|
-
rawPayload: String(r.raw_payload),
|
|
48
|
-
error: String(r.error),
|
|
49
|
-
eventName: r.event_name == null ? null : String(r.event_name),
|
|
50
|
-
deliveryId: r.delivery_id == null ? null : String(r.delivery_id),
|
|
51
|
-
signature: r.signature == null ? null : String(r.signature),
|
|
52
|
-
installationId: r.installation_id == null ? null : String(r.installation_id),
|
|
53
|
-
repoFullName: r.repo_full_name == null ? null : String(r.repo_full_name),
|
|
54
|
-
retryCount: Number(r.retry_count ?? 0),
|
|
55
|
-
receivedAt: String(r.received_at),
|
|
56
|
-
retriedAt: r.retried_at == null ? null : String(r.retried_at),
|
|
57
|
-
bucket: r.bucket == null ? 'parse_error' : String(r.bucket),
|
|
58
|
-
};
|
|
59
|
-
}
|
|
60
|
-
function bumpRetryCount(hippoRoot, id) {
|
|
61
|
-
const db = openHippoDb(hippoRoot);
|
|
62
|
-
try {
|
|
63
|
-
db.prepare(`UPDATE github_dlq
|
|
64
|
-
SET retry_count = retry_count + 1,
|
|
65
|
-
retried_at = ?
|
|
66
|
-
WHERE id = ?`).run(new Date().toISOString(), id);
|
|
67
|
-
}
|
|
68
|
-
finally {
|
|
69
|
-
closeHippoDb(db);
|
|
70
|
-
}
|
|
71
|
-
}
|
|
5
|
+
/** GitHub's dead-letter table; the event, delivery, installation and repo columns let an operator triage a row without re-reading the payload. */
|
|
6
|
+
export const githubDlq = {
|
|
7
|
+
letter: (row) => ({ connector: 'github', ...row }),
|
|
8
|
+
list: listDlqRows,
|
|
9
|
+
};
|
|
72
10
|
/**
|
|
73
11
|
* Replay a DLQ row through the normal ingest path. Behavior:
|
|
74
12
|
* 1. Fetch row by id. Not found → `not_found`.
|
|
@@ -85,23 +23,9 @@ function bumpRetryCount(hippoRoot, id) {
|
|
|
85
23
|
* deployment state NOW, not at the time of original DLQing.
|
|
86
24
|
*/
|
|
87
25
|
export async function replayDlqEntry(ctx, id, opts = {}) {
|
|
88
|
-
const
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
row = getDlqEntry(db, id);
|
|
92
|
-
}
|
|
93
|
-
finally {
|
|
94
|
-
closeHippoDb(db);
|
|
95
|
-
}
|
|
96
|
-
if (!row) {
|
|
97
|
-
return {
|
|
98
|
-
ok: false,
|
|
99
|
-
status: 'not_found',
|
|
100
|
-
memoryId: null,
|
|
101
|
-
retryCount: 0,
|
|
102
|
-
reason: `dlq id ${id} not found`,
|
|
103
|
-
};
|
|
104
|
-
}
|
|
26
|
+
const row = dlqEntry(ctx.hippoRoot, id);
|
|
27
|
+
if (!row)
|
|
28
|
+
return replayFailed('not_found', 0, `dlq id ${id} not found`);
|
|
105
29
|
// Signature verification (current secret, not the one in effect when DLQed).
|
|
106
30
|
if (!opts.force && opts.webhookSecret) {
|
|
107
31
|
const sigFailure = checkReplaySignature(ctx.hippoRoot, id, row, opts.webhookSecret, opts.previousSecret);
|
|
@@ -113,7 +37,7 @@ export async function replayDlqEntry(ctx, id, opts = {}) {
|
|
|
113
37
|
return envelopeFailure;
|
|
114
38
|
// Without an ingest hook this is a dry-run validation. Bump and report.
|
|
115
39
|
if (!opts.ingestHook) {
|
|
116
|
-
|
|
40
|
+
bumpDlqRetry(ctx.hippoRoot, id);
|
|
117
41
|
return {
|
|
118
42
|
ok: true,
|
|
119
43
|
status: 'replayed',
|
|
@@ -133,7 +57,7 @@ export async function replayDlqEntry(ctx, id, opts = {}) {
|
|
|
133
57
|
eventName,
|
|
134
58
|
deliveryId,
|
|
135
59
|
});
|
|
136
|
-
|
|
60
|
+
bumpDlqRetry(ctx.hippoRoot, id);
|
|
137
61
|
return {
|
|
138
62
|
ok: true,
|
|
139
63
|
status: 'replayed',
|
|
@@ -144,13 +68,7 @@ export async function replayDlqEntry(ctx, id, opts = {}) {
|
|
|
144
68
|
/** The failure result when the row cannot pass the signature gate, else null. */
|
|
145
69
|
function checkReplaySignature(hippoRoot, id, row, webhookSecret, previousSecret) {
|
|
146
70
|
if (!row.signature) {
|
|
147
|
-
return
|
|
148
|
-
ok: false,
|
|
149
|
-
status: 'sig_missing',
|
|
150
|
-
memoryId: null,
|
|
151
|
-
retryCount: row.retryCount,
|
|
152
|
-
reason: 'row has no signature (legacy, or redacted before storing); pass --force to replay',
|
|
153
|
-
};
|
|
71
|
+
return replayFailed('sig_missing', row.retryCount, 'row has no signature (legacy, or redacted before storing); pass --force to replay');
|
|
154
72
|
}
|
|
155
73
|
const sigOk = verifyGitHubSignature({
|
|
156
74
|
rawBody: row.rawPayload,
|
|
@@ -159,14 +77,8 @@ function checkReplaySignature(hippoRoot, id, row, webhookSecret, previousSecret)
|
|
|
159
77
|
previousSecret,
|
|
160
78
|
});
|
|
161
79
|
if (!sigOk) {
|
|
162
|
-
|
|
163
|
-
return
|
|
164
|
-
ok: false,
|
|
165
|
-
status: 'sig_fail',
|
|
166
|
-
memoryId: null,
|
|
167
|
-
retryCount: row.retryCount + 1,
|
|
168
|
-
reason: 'signature did not verify against current GITHUB_WEBHOOK_SECRET; pass --force to replay anyway',
|
|
169
|
-
};
|
|
80
|
+
bumpDlqRetry(hippoRoot, id);
|
|
81
|
+
return replayFailed('sig_fail', row.retryCount + 1, 'signature did not verify against current GITHUB_WEBHOOK_SECRET; pass --force to replay anyway');
|
|
170
82
|
}
|
|
171
83
|
return null;
|
|
172
84
|
}
|
|
@@ -177,28 +89,16 @@ function checkReplayEnvelope(hippoRoot, id, row) {
|
|
|
177
89
|
parsed = JSON.parse(row.rawPayload);
|
|
178
90
|
}
|
|
179
91
|
catch (e) {
|
|
180
|
-
|
|
92
|
+
bumpDlqRetry(hippoRoot, id);
|
|
181
93
|
// SAFETY: this is a best-effort error message only; property access on
|
|
182
94
|
// any JS value is safe (undefined if absent), preserving the existing
|
|
183
95
|
// lenient formatting even when something non-Error was thrown.
|
|
184
96
|
const message = e.message;
|
|
185
|
-
return {
|
|
186
|
-
ok: false,
|
|
187
|
-
status: 'parse_error',
|
|
188
|
-
memoryId: null,
|
|
189
|
-
retryCount: row.retryCount + 1,
|
|
190
|
-
reason: `still unparseable: ${message}`,
|
|
191
|
-
};
|
|
97
|
+
return replayFailed('parse_error', row.retryCount + 1, `still unparseable: ${message}`);
|
|
192
98
|
}
|
|
193
99
|
if (!isGitHubWebhookEnvelope(parsed)) {
|
|
194
|
-
|
|
195
|
-
return
|
|
196
|
-
ok: false,
|
|
197
|
-
status: 'unhandled',
|
|
198
|
-
memoryId: null,
|
|
199
|
-
retryCount: row.retryCount + 1,
|
|
200
|
-
reason: 'not a GitHub webhook envelope',
|
|
201
|
-
};
|
|
100
|
+
bumpDlqRetry(hippoRoot, id);
|
|
101
|
+
return replayFailed('unhandled', row.retryCount + 1, 'not a GitHub webhook envelope');
|
|
202
102
|
}
|
|
203
103
|
return null;
|
|
204
104
|
}
|
|
@@ -1,25 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
* GitHub event ingest with afterWrite race-safe idempotency.
|
|
3
|
-
*
|
|
4
|
-
* Mirrors src/connectors/slack/ingest.ts. The dedupe key is sha256(eventName +
|
|
5
|
-
* ':' + rawBody), derived from the signed body, not from the
|
|
6
|
-
* unsigned X-GitHub-Delivery header, so a replay attacker cannot bypass
|
|
7
|
-
* idempotency by rotating the delivery UUID.
|
|
8
|
-
*
|
|
9
|
-
* Race semantics:
|
|
10
|
-
* - Fast path: hasSeenKey pre-check returns 'duplicate' for the common case.
|
|
11
|
-
* - Slow path: hasSeenKey passes (no row yet). Two workers may race into
|
|
12
|
-
* remember() concurrently. Inside the writeEntry SAVEPOINT, INSERT OR
|
|
13
|
-
* IGNORE on github_event_log either inserts (changes=1, commit) or
|
|
14
|
-
* collides (changes=0, throw DuplicateIdempotencyError -> SAVEPOINT
|
|
15
|
-
* rolls back this worker's memory row). Exactly one memory exists per
|
|
16
|
-
* idempotency_key.
|
|
17
|
-
*
|
|
18
|
-
* The `__testInjectBeforeLog` hook below lets tests pre-populate github_event_log
|
|
19
|
-
* inside the SAVEPOINT to exercise the changes=0 -> rollback path, not just the fast path.
|
|
20
|
-
*/
|
|
21
|
-
import { type Context } from '../../api.js';
|
|
22
|
-
import { type DatabaseSyncLike } from '../../db.js';
|
|
1
|
+
import { type Context } from '../../api/index.js';
|
|
23
2
|
import type { GitHubIssueEvent, GitHubIssueCommentEvent, GitHubPullRequestEvent, GitHubPullRequestReviewCommentEvent } from './types.js';
|
|
24
3
|
export type IngestStatus = 'ingested' | 'duplicate' | 'skipped' | 'skipped_duplicate';
|
|
25
4
|
export interface IngestResult {
|
|
@@ -52,14 +31,6 @@ export interface IngestInput {
|
|
|
52
31
|
rawBody: string;
|
|
53
32
|
/** X-GitHub-Delivery header value, audit metadata only. */
|
|
54
33
|
deliveryId: string;
|
|
55
|
-
/**
|
|
56
|
-
* Test-only hook fired inside the SAVEPOINT, AFTER the memory row is
|
|
57
|
-
* inserted but BEFORE the github_event_log INSERT OR IGNORE. Tests pass
|
|
58
|
-
* a function that pre-inserts the github_event_log row using the
|
|
59
|
-
* provided db handle to simulate a concurrent worker winning the race.
|
|
60
|
-
* Production callers leave this undefined.
|
|
61
|
-
*/
|
|
62
|
-
__testInjectBeforeLog?: (db: DatabaseSyncLike, idempotencyKey: string) => void;
|
|
63
34
|
}
|
|
64
|
-
export declare function ingestEvent(ctx: Context, input: IngestInput): IngestResult
|
|
35
|
+
export declare function ingestEvent(ctx: Context, input: IngestInput): Promise<IngestResult>;
|
|
65
36
|
//# sourceMappingURL=ingest.d.ts.map
|
|
@@ -1,27 +1,9 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
* idempotency by rotating the delivery UUID.
|
|
8
|
-
*
|
|
9
|
-
* Race semantics:
|
|
10
|
-
* - Fast path: hasSeenKey pre-check returns 'duplicate' for the common case.
|
|
11
|
-
* - Slow path: hasSeenKey passes (no row yet). Two workers may race into
|
|
12
|
-
* remember() concurrently. Inside the writeEntry SAVEPOINT, INSERT OR
|
|
13
|
-
* IGNORE on github_event_log either inserts (changes=1, commit) or
|
|
14
|
-
* collides (changes=0, throw DuplicateIdempotencyError -> SAVEPOINT
|
|
15
|
-
* rolls back this worker's memory row). Exactly one memory exists per
|
|
16
|
-
* idempotency_key.
|
|
17
|
-
*
|
|
18
|
-
* The `__testInjectBeforeLog` hook below lets tests pre-populate github_event_log
|
|
19
|
-
* inside the SAVEPOINT to exercise the changes=0 -> rollback path, not just the fast path.
|
|
20
|
-
*/
|
|
21
|
-
import { remember } from '../../api.js';
|
|
22
|
-
import { openHippoDb, closeHippoDb } from '../../db.js';
|
|
23
|
-
import { RejectedValueError } from '../../rejection.js';
|
|
24
|
-
import { hasSeenKey, lookupMemoryByKey, DuplicateIdempotencyError } from './idempotency.js';
|
|
1
|
+
// GitHub event ingest, once per idempotency key. The key comes from the event's own content, never from the unsigned
|
|
2
|
+
// X-GitHub-Delivery header, so a replay cannot get past it by rotating the delivery id. The pre-check is only the fast path:
|
|
3
|
+
// the store logs the key in the memory's own transaction, which is what holds when two workers race.
|
|
4
|
+
import { remember } from '../../api/index.js';
|
|
5
|
+
import { requireGroup, storeFor } from '../../store/index.js';
|
|
6
|
+
import { RejectedValueError } from '../../store/rejection.js';
|
|
25
7
|
import { computeIdempotencyKey } from './signature.js';
|
|
26
8
|
import { issueEventToRememberOpts, issueCommentEventToRememberOpts, pullRequestEventToRememberOpts, prReviewCommentEventToRememberOpts, } from './transform.js';
|
|
27
9
|
function transformEvent(event) {
|
|
@@ -67,87 +49,42 @@ function eventUpdatedAt(event) {
|
|
|
67
49
|
return event.payload.comment.updated_at ?? null;
|
|
68
50
|
}
|
|
69
51
|
}
|
|
70
|
-
|
|
71
|
-
|
|
52
|
+
export async function ingestEvent(ctx, input) {
|
|
53
|
+
const events = requireGroup(storeFor(ctx), 'connectorEvents');
|
|
72
54
|
const idempotencyKey = computeIdempotencyKey(eventArtifactRef(input.event), eventUpdatedAt(input.event));
|
|
55
|
+
const event = { connector: 'github', idempotencyKey, deliveryId: input.deliveryId, eventName: input.event.eventName };
|
|
73
56
|
// Fast path: pre-check. Avoids running the transform / opening a write tx
|
|
74
57
|
// for the common already-seen case (GitHub auto-retries with the same body).
|
|
75
|
-
const
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
return { status: 'duplicate', memoryId: lookupMemoryByKey(db, idempotencyKey) };
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
finally {
|
|
82
|
-
closeHippoDb(db);
|
|
83
|
-
}
|
|
58
|
+
const seen = await events.eventRecord(event);
|
|
59
|
+
if (seen.seen)
|
|
60
|
+
return { status: 'duplicate', memoryId: seen.memoryId };
|
|
84
61
|
const opts = transformEvent(input.event);
|
|
85
62
|
if (!opts) {
|
|
86
63
|
// Empty body: no memory to write, but mark seen so a retry of the same
|
|
87
64
|
// empty event returns 'duplicate' (not 'skipped' again — that would
|
|
88
65
|
// re-run the transform on every retry).
|
|
89
|
-
|
|
66
|
+
await events.markEventSeen(event);
|
|
90
67
|
return { status: 'skipped', memoryId: null };
|
|
91
68
|
}
|
|
92
|
-
// Atomic write via afterWrite. Inside writeEntry's SAVEPOINT:
|
|
93
|
-
// 1. memories row INSERT lands.
|
|
94
|
-
// 2. (test-only) __testInjectBeforeLog can race-inject a colliding key.
|
|
95
|
-
// 3. INSERT OR IGNORE on github_event_log; if a concurrent worker (or
|
|
96
|
-
// the test injection) beat us, changes=0 -> throw -> SAVEPOINT rolls
|
|
97
|
-
// back our memory row. Other worker's commit stands.
|
|
98
69
|
try {
|
|
99
|
-
return rememberWithEventLog(ctx,
|
|
70
|
+
return await rememberWithEventLog(ctx, event, opts);
|
|
100
71
|
}
|
|
101
72
|
catch (e) {
|
|
102
|
-
if (e instanceof DuplicateIdempotencyError) {
|
|
103
|
-
// Other worker's row is committed. Return its memory_id so callers
|
|
104
|
-
// behave identically to the fast-path 'duplicate' branch.
|
|
105
|
-
const db3 = openHippoDb(ctx.hippoRoot);
|
|
106
|
-
try {
|
|
107
|
-
return { status: 'skipped_duplicate', memoryId: lookupMemoryByKey(db3, idempotencyKey) };
|
|
108
|
-
}
|
|
109
|
-
finally {
|
|
110
|
-
closeHippoDb(db3);
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
73
|
if (e instanceof RejectedValueError) {
|
|
114
74
|
// A tombstone hit is a PERMANENT skip, never DLQ-retried: mark the key seen like the empty-body
|
|
115
75
|
// branch above so a GitHub retry of the same delivery acks as done, not error.
|
|
116
|
-
|
|
76
|
+
await events.markEventSeen(event);
|
|
117
77
|
return { status: 'skipped', memoryId: null };
|
|
118
78
|
}
|
|
119
79
|
throw e;
|
|
120
80
|
}
|
|
121
81
|
}
|
|
122
|
-
function
|
|
123
|
-
const db = openHippoDb(hippoRoot);
|
|
124
|
-
try {
|
|
125
|
-
db
|
|
126
|
-
.prepare(INSERT_EVENT_LOG_SQL)
|
|
127
|
-
.run(idempotencyKey, input.deliveryId, input.event.eventName, new Date().toISOString(), null);
|
|
128
|
-
}
|
|
129
|
-
finally {
|
|
130
|
-
closeHippoDb(db);
|
|
131
|
-
}
|
|
132
|
-
}
|
|
133
|
-
function rememberWithEventLog(ctx, input, idempotencyKey, opts) {
|
|
82
|
+
async function rememberWithEventLog(ctx, event, opts) {
|
|
134
83
|
// No `|| 'connector:github'` fallback (see rememberWithEventLog in slack/ingest.ts for rationale).
|
|
135
|
-
const result = remember({ ...
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
afterWrite: (innerDb, memoryId) => {
|
|
140
|
-
if (input.__testInjectBeforeLog) {
|
|
141
|
-
input.__testInjectBeforeLog(innerDb, idempotencyKey);
|
|
142
|
-
}
|
|
143
|
-
const inserted = innerDb
|
|
144
|
-
.prepare(INSERT_EVENT_LOG_SQL)
|
|
145
|
-
.run(idempotencyKey, input.deliveryId, input.event.eventName, new Date().toISOString(), memoryId);
|
|
146
|
-
if (Number(inserted.changes ?? 0) === 0) {
|
|
147
|
-
throw new DuplicateIdempotencyError(idempotencyKey);
|
|
148
|
-
}
|
|
149
|
-
},
|
|
150
|
-
});
|
|
84
|
+
const result = await remember(ctx, { ...opts, untrusted: true, event });
|
|
85
|
+
// Another worker logged this key between the pre-check and the write: its memory stands and ours was not stored.
|
|
86
|
+
if (result.duplicate)
|
|
87
|
+
return { status: 'skipped_duplicate', memoryId: result.duplicate.memoryId };
|
|
151
88
|
return { status: 'ingested', memoryId: result.id };
|
|
152
89
|
}
|
|
153
90
|
//# sourceMappingURL=ingest.js.map
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
* `GitHubFetchError`: an empty page would be an empty backfill with no operator signal.
|
|
9
9
|
*/
|
|
10
10
|
import { type RateLimitInfo } from './ratelimit.js';
|
|
11
|
-
import type { JsonValue } from '../../json.js';
|
|
11
|
+
import type { JsonValue } from '../../util/json.js';
|
|
12
12
|
export declare class GitHubFetchError extends Error {
|
|
13
13
|
readonly status: number;
|
|
14
14
|
readonly bodyExcerpt: string;
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
* `GitHubFetchError`: an empty page would be an empty backfill with no operator signal.
|
|
9
9
|
*/
|
|
10
10
|
import { parseRateLimit } from './ratelimit.js';
|
|
11
|
-
import { fetchWithRetry } from '../../http-retry.js';
|
|
11
|
+
import { fetchWithRetry } from '../../util/http-retry.js';
|
|
12
12
|
export class GitHubFetchError extends Error {
|
|
13
13
|
status;
|
|
14
14
|
bodyExcerpt;
|
|
@@ -55,6 +55,7 @@ export const realGitHubFetcher = async ({ url, token }) => {
|
|
|
55
55
|
const rateLimit = parseRateLimit(headers, res.status);
|
|
56
56
|
// Don't silently turn 401/403/404/500 into empty pages.
|
|
57
57
|
if (res.status !== 200 && rateLimit.reason === 'none') {
|
|
58
|
+
// The status is the error reported; a body that cannot be read only costs its snippet.
|
|
58
59
|
const body = await res.text().catch(() => '');
|
|
59
60
|
throw new GitHubFetchError(res.status, body.slice(0, ERROR_BODY_SNIPPET_CHARS), url);
|
|
60
61
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import { type HippoStore } from '../../store/index.js';
|
|
2
2
|
export interface ResolveArgs {
|
|
3
3
|
/** String form of `installation.id`. `null`/`undefined` means "no installation field" (PAT-mode webhook). */
|
|
4
4
|
installationId?: string | null;
|
|
@@ -29,5 +29,5 @@ export interface ResolveArgs {
|
|
|
29
29
|
* The fail-closed contract lives here so every caller (route handler, CLI
|
|
30
30
|
* replay, future MCP) gets identical protection.
|
|
31
31
|
*/
|
|
32
|
-
export declare function resolveTenantForGitHub(
|
|
32
|
+
export declare function resolveTenantForGitHub(hippoRoot: string, args: ResolveArgs, store?: HippoStore): Promise<string | null>;
|
|
33
33
|
//# sourceMappingURL=tenant-routing.d.ts.map
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { envGithubAllowUnknownInstallationFallback, envTenant } from '../../env.js';
|
|
1
|
+
import { envGithubAllowUnknownInstallationFallback, envTenant } from '../../util/env.js';
|
|
2
|
+
import { requireGroup, storeFor } from '../../store/index.js';
|
|
2
3
|
/**
|
|
3
4
|
* Resolve the tenant_id for a GitHub webhook envelope.
|
|
4
5
|
*
|
|
@@ -23,48 +24,21 @@ import { envGithubAllowUnknownInstallationFallback, envTenant } from '../../env.
|
|
|
23
24
|
* The fail-closed contract lives here so every caller (route handler, CLI
|
|
24
25
|
* replay, future MCP) gets identical protection.
|
|
25
26
|
*/
|
|
26
|
-
export function resolveTenantForGitHub(
|
|
27
|
+
export async function resolveTenantForGitHub(hippoRoot, args, store) {
|
|
27
28
|
const envFallback = () => envTenant();
|
|
28
29
|
const escapeHatch = envGithubAllowUnknownInstallationFallback();
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
.prepare(`SELECT COUNT(*) AS c FROM github_installations`)
|
|
33
|
-
.get().c;
|
|
34
|
-
// SAFETY: the row comes from the SELECT above, which projects exactly one
|
|
35
|
-
// column, `c`, as a COUNT(*).
|
|
36
|
-
const repoCount = db
|
|
37
|
-
.prepare(`SELECT COUNT(*) AS c FROM github_repositories`)
|
|
38
|
-
.get().c;
|
|
30
|
+
const routing = await requireGroup(storeFor({ hippoRoot, store }), 'connectorEvents').githubRouting(args);
|
|
31
|
+
if (routing.tenant)
|
|
32
|
+
return routing.tenant;
|
|
39
33
|
if (args.installationId) {
|
|
40
|
-
//
|
|
41
|
-
|
|
42
|
-
const row = db
|
|
43
|
-
.prepare(`SELECT tenant_id FROM github_installations WHERE installation_id = ?`)
|
|
44
|
-
.get(args.installationId);
|
|
45
|
-
if (row?.tenant_id)
|
|
46
|
-
return row.tenant_id;
|
|
47
|
-
if (Number(instCount) === 0) {
|
|
48
|
-
// Single-tenant install (table empty); env fallback is safe.
|
|
34
|
+
// An empty table is a single-tenant install, where the env fallback is safe; else fail closed.
|
|
35
|
+
if (routing.installations === 0)
|
|
49
36
|
return envFallback();
|
|
50
|
-
}
|
|
51
|
-
// Multi-tenant install with unknown installation_id — fail closed.
|
|
52
37
|
return escapeHatch ? envFallback() : null;
|
|
53
38
|
}
|
|
54
|
-
// No installation.id (PAT-mode webhook).
|
|
55
|
-
if (
|
|
56
|
-
// Single-tenant deployment with no routing tables populated.
|
|
39
|
+
// No installation.id (PAT-mode webhook) and no routing rows at all: single-tenant deployment.
|
|
40
|
+
if (routing.installations === 0 && routing.repositories === 0)
|
|
57
41
|
return envFallback();
|
|
58
|
-
}
|
|
59
|
-
if (args.repoFullName) {
|
|
60
|
-
// SAFETY: the row comes from the SELECT above, which projects exactly
|
|
61
|
-
// the tenant_id column of github_repositories.
|
|
62
|
-
const row = db
|
|
63
|
-
.prepare(`SELECT tenant_id FROM github_repositories WHERE repo_full_name = ? ORDER BY added_at, tenant_id LIMIT 1`)
|
|
64
|
-
.get(args.repoFullName);
|
|
65
|
-
if (row?.tenant_id)
|
|
66
|
-
return row.tenant_id;
|
|
67
|
-
}
|
|
68
42
|
return escapeHatch ? envFallback() : null;
|
|
69
43
|
}
|
|
70
44
|
//# sourceMappingURL=tenant-routing.js.map
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { RememberOpts } from '../../api.js';
|
|
1
|
+
import type { RememberOpts } from '../../api/index.js';
|
|
2
2
|
import type { GitHubIssueEvent, GitHubIssueCommentEvent, GitHubPullRequestEvent, GitHubPullRequestReviewCommentEvent } from './types.js';
|
|
3
3
|
export declare function issueEventToRememberOpts(evt: GitHubIssueEvent): RememberOpts | null;
|
|
4
4
|
export declare function issueCommentEventToRememberOpts(evt: GitHubIssueCommentEvent): RememberOpts | null;
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
* header value so a malicious or misrouted payload cannot satisfy a guard
|
|
8
8
|
* for the wrong event type.
|
|
9
9
|
*/
|
|
10
|
-
import { type JsonValue } from '../../json.js';
|
|
10
|
+
import { type JsonValue } from '../../util/json.js';
|
|
11
11
|
/**
|
|
12
12
|
* `private` MUST be optional, not required. The Slack-style
|
|
13
13
|
* fail-safe in scope.ts requires an envelope with `private: undefined` to
|
|
@@ -7,33 +7,30 @@
|
|
|
7
7
|
* header value so a malicious or misrouted payload cannot satisfy a guard
|
|
8
8
|
* for the wrong event type.
|
|
9
9
|
*/
|
|
10
|
-
import { isJsonString } from '../../json.js';
|
|
11
|
-
function
|
|
10
|
+
import { isJsonString, isJsonNumber } from '../../util/json.js';
|
|
11
|
+
function isObjectOrArray(x) {
|
|
12
12
|
return x !== null && typeof x === 'object';
|
|
13
13
|
}
|
|
14
|
-
function isJsonNumber(x) {
|
|
15
|
-
return typeof x === 'number';
|
|
16
|
-
}
|
|
17
14
|
function isGitHubSender(x) {
|
|
18
|
-
if (!
|
|
15
|
+
if (!isObjectOrArray(x))
|
|
19
16
|
return false;
|
|
20
17
|
return isJsonString(x.login) && isJsonNumber(x.id);
|
|
21
18
|
}
|
|
22
19
|
export function isGitHubWebhookEnvelope(x) {
|
|
23
|
-
if (!
|
|
20
|
+
if (!isObjectOrArray(x))
|
|
24
21
|
return false;
|
|
25
22
|
// Duck-type: an envelope must at least carry an action OR a repository field.
|
|
26
|
-
return isJsonString(x.action) ||
|
|
23
|
+
return isJsonString(x.action) || isObjectOrArray(x.repository);
|
|
27
24
|
}
|
|
28
25
|
export function isGitHubIssueEvent(x, evtHeader) {
|
|
29
26
|
if (evtHeader !== 'issues')
|
|
30
27
|
return false;
|
|
31
|
-
if (!
|
|
28
|
+
if (!isObjectOrArray(x))
|
|
32
29
|
return false;
|
|
33
30
|
if (!isJsonString(x.action))
|
|
34
31
|
return false;
|
|
35
32
|
const issue = x.issue;
|
|
36
|
-
if (!
|
|
33
|
+
if (!isObjectOrArray(issue))
|
|
37
34
|
return false;
|
|
38
35
|
if (!isJsonNumber(issue.number))
|
|
39
36
|
return false;
|
|
@@ -44,15 +41,15 @@ export function isGitHubIssueEvent(x, evtHeader) {
|
|
|
44
41
|
export function isGitHubIssueCommentEvent(x, evtHeader) {
|
|
45
42
|
if (evtHeader !== 'issue_comment')
|
|
46
43
|
return false;
|
|
47
|
-
if (!
|
|
44
|
+
if (!isObjectOrArray(x))
|
|
48
45
|
return false;
|
|
49
46
|
if (!isJsonString(x.action))
|
|
50
47
|
return false;
|
|
51
48
|
const issue = x.issue;
|
|
52
|
-
if (!
|
|
49
|
+
if (!isObjectOrArray(issue) || !isJsonNumber(issue.number))
|
|
53
50
|
return false;
|
|
54
51
|
const comment = x.comment;
|
|
55
|
-
if (!
|
|
52
|
+
if (!isObjectOrArray(comment))
|
|
56
53
|
return false;
|
|
57
54
|
if (!isJsonNumber(comment.id))
|
|
58
55
|
return false;
|
|
@@ -63,12 +60,12 @@ export function isGitHubIssueCommentEvent(x, evtHeader) {
|
|
|
63
60
|
export function isGitHubPullRequestEvent(x, evtHeader) {
|
|
64
61
|
if (evtHeader !== 'pull_request')
|
|
65
62
|
return false;
|
|
66
|
-
if (!
|
|
63
|
+
if (!isObjectOrArray(x))
|
|
67
64
|
return false;
|
|
68
65
|
if (!isJsonString(x.action))
|
|
69
66
|
return false;
|
|
70
67
|
const pr = x.pull_request;
|
|
71
|
-
if (!
|
|
68
|
+
if (!isObjectOrArray(pr))
|
|
72
69
|
return false;
|
|
73
70
|
if (!isJsonNumber(pr.number))
|
|
74
71
|
return false;
|
|
@@ -79,15 +76,15 @@ export function isGitHubPullRequestEvent(x, evtHeader) {
|
|
|
79
76
|
export function isGitHubPullRequestReviewCommentEvent(x, evtHeader) {
|
|
80
77
|
if (evtHeader !== 'pull_request_review_comment')
|
|
81
78
|
return false;
|
|
82
|
-
if (!
|
|
79
|
+
if (!isObjectOrArray(x))
|
|
83
80
|
return false;
|
|
84
81
|
if (!isJsonString(x.action))
|
|
85
82
|
return false;
|
|
86
83
|
const pr = x.pull_request;
|
|
87
|
-
if (!
|
|
84
|
+
if (!isObjectOrArray(pr) || !isJsonNumber(pr.number))
|
|
88
85
|
return false;
|
|
89
86
|
const comment = x.comment;
|
|
90
|
-
if (!
|
|
87
|
+
if (!isObjectOrArray(comment))
|
|
91
88
|
return false;
|
|
92
89
|
if (!isJsonNumber(comment.id))
|
|
93
90
|
return false;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import type { HippoStore } from '../../store/index.js';
|
|
2
|
+
import { type WebhookRequest } from '../../util/http-util.js';
|
|
2
3
|
/**
|
|
3
4
|
* GitHub webhook receiver. Mirrors the Slack route shape but with
|
|
4
5
|
* GitHub-specific idioms:
|
|
@@ -15,5 +16,5 @@ import { type WebhookRequest } from '../../http-util.js';
|
|
|
15
16
|
*
|
|
16
17
|
* Bearer auth is skipped on purpose: server.ts checks isPublicRoute before calling this.
|
|
17
18
|
*/
|
|
18
|
-
export declare function handleGitHubEventsWebhook(
|
|
19
|
+
export declare function handleGitHubEventsWebhook(request: WebhookRequest, store?: HippoStore): Promise<void>;
|
|
19
20
|
//# sourceMappingURL=webhook.d.ts.map
|