hippo-memory 1.72.0 → 2.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +6 -4
- package/dist/agent-memories/apply.d.ts +7 -5
- package/dist/agent-memories/apply.js +66 -39
- package/dist/agent-memories/claude-code.d.ts +8 -2
- package/dist/agent-memories/claude-code.js +26 -7
- package/dist/agent-memories/copilot.js +2 -1
- package/dist/agent-memories/files.js +2 -1
- package/dist/agent-memories/legacy.d.ts +6 -3
- package/dist/agent-memories/legacy.js +35 -14
- package/dist/agent-memories/markdown.d.ts +3 -1
- package/dist/agent-memories/markdown.js +3 -1
- package/dist/agent-memories/openclaw.js +5 -2
- package/dist/agent-memories/plan.js +11 -1
- package/dist/agent-memories/project-folds.js +2 -1
- package/dist/agent-memories/report.d.ts +4 -1
- package/dist/agent-memories/report.js +43 -9
- package/dist/agent-memories/source.d.ts +8 -2
- package/dist/agent-memories/source.js +11 -3
- package/dist/agent-memories/sync.d.ts +7 -2
- package/dist/agent-memories/sync.js +141 -101
- package/dist/api/assemble.d.ts +6 -4
- package/dist/api/assemble.js +11 -5
- package/dist/api/{audit.d.ts → auth/audit.d.ts} +18 -16
- package/dist/api/auth/audit.js +58 -0
- package/dist/api/{auth.d.ts → auth/auth.d.ts} +19 -16
- package/dist/api/{auth.js → auth/auth.js} +66 -54
- package/dist/api/{quarantine.d.ts → auth/quarantine.d.ts} +8 -7
- package/dist/api/{quarantine.js → auth/quarantine.js} +8 -7
- package/dist/api/auth/session-owners.d.ts +10 -0
- package/dist/api/auth/session-owners.js +35 -0
- package/dist/api/availability.d.ts +3 -1
- package/dist/api/availability.js +3 -1
- package/dist/api/busy.d.ts +2 -0
- package/dist/api/busy.js +2 -0
- package/dist/api/cli-surface.d.ts +6 -0
- package/dist/api/cli-surface.js +6 -0
- package/dist/api/config-of.d.ts +5 -0
- package/dist/api/config-of.js +6 -0
- package/dist/api/context-auto.d.ts +4 -1
- package/dist/api/context-auto.js +14 -4
- package/dist/api/context-render.js +14 -7
- package/dist/api/context-select.d.ts +4 -1
- package/dist/api/context-select.js +31 -34
- package/dist/api/context-types.d.ts +38 -12
- package/dist/api/context.d.ts +8 -5
- package/dist/api/context.js +120 -63
- package/dist/api/continuity.d.ts +24 -21
- package/dist/api/continuity.js +18 -20
- package/dist/api/correction-latency.d.ts +3 -1
- package/dist/api/correction-latency.js +3 -1
- package/dist/api/error-reply.d.ts +4 -1
- package/dist/api/error-reply.js +12 -3
- package/dist/api/index.d.ts +39 -23
- package/dist/api/index.js +21 -23
- package/dist/api/instruction-detect.d.ts +4 -1
- package/dist/api/instruction-detect.js +75 -20
- package/dist/api/ledger-db.d.ts +15 -11
- package/dist/api/ledger-db.js +21 -23
- package/dist/api/memories/conflicts.d.ts +33 -0
- package/dist/api/memories/conflicts.js +67 -0
- package/dist/api/{forget.d.ts → memories/forget.d.ts} +11 -9
- package/dist/api/{forget.js → memories/forget.js} +23 -17
- package/dist/api/memories/memories.d.ts +27 -0
- package/dist/api/memories/memories.js +52 -0
- package/dist/api/memories/outcome.d.ts +22 -0
- package/dist/api/memories/outcome.js +28 -0
- package/dist/api/memories/promote.d.ts +40 -0
- package/dist/api/memories/promote.js +76 -0
- package/dist/api/memories/refine.d.ts +10 -0
- package/dist/api/memories/refine.js +12 -0
- package/dist/api/{remember-local.d.ts → memories/remember-local.d.ts} +17 -9
- package/dist/api/{remember-local.js → memories/remember-local.js} +46 -24
- package/dist/api/{remember.d.ts → memories/remember.d.ts} +22 -13
- package/dist/api/{remember.js → memories/remember.js} +50 -32
- package/dist/api/objects/cards.d.ts +39 -0
- package/dist/api/{cards.js → objects/cards.js} +12 -14
- package/dist/api/{drill-down.d.ts → objects/drill-down.d.ts} +12 -10
- package/dist/api/{drill-down.js → objects/drill-down.js} +7 -7
- package/dist/api/objects/goals.d.ts +18 -0
- package/dist/api/{goals.js → objects/goals.js} +12 -12
- package/dist/api/objects/graph.d.ts +11 -0
- package/dist/api/objects/graph.js +16 -0
- package/dist/api/objects/objects.d.ts +9 -0
- package/dist/api/{objects.js → objects/objects.js} +2 -3
- package/dist/api/objects/predictions.d.ts +11 -0
- package/dist/api/{predictions.js → objects/predictions.js} +7 -5
- package/dist/api/{projects.d.ts → objects/projects.d.ts} +8 -5
- package/dist/api/{projects.js → objects/projects.js} +8 -4
- package/dist/api/pilot-arm.d.ts +8 -4
- package/dist/api/pilot-arm.js +5 -4
- package/dist/api/prompt-hook.d.ts +35 -20
- package/dist/api/prompt-hook.js +66 -44
- package/dist/api/provenance-coverage.d.ts +3 -1
- package/dist/api/provenance-coverage.js +3 -1
- package/dist/api/recall/finish.d.ts +185 -0
- package/dist/api/recall/finish.js +301 -0
- package/dist/api/{recall-pipeline.d.ts → recall/pipeline.d.ts} +12 -8
- package/dist/api/{recall-pipeline.js → recall/pipeline.js} +185 -101
- package/dist/api/recall/recall.d.ts +6 -0
- package/dist/api/{recall.js → recall/recall.js} +116 -72
- package/dist/api/recall/render.d.ts +39 -0
- package/dist/api/recall/render.js +60 -0
- package/dist/api/{recall-request.d.ts → recall/request.d.ts} +7 -5
- package/dist/api/recall/request.js +261 -0
- package/dist/api/{recall-cli.d.ts → recall/rows.d.ts} +18 -12
- package/dist/api/{recall-cli.js → recall/rows.js} +28 -27
- package/dist/api/{recall-types.d.ts → recall/types.d.ts} +95 -68
- package/dist/api/{recall-types.js → recall/types.js} +1 -1
- package/dist/api/session-end.d.ts +36 -8
- package/dist/api/session-end.js +71 -25
- package/dist/api/{auto-sleep.d.ts → sleep/auto-sleep.d.ts} +9 -5
- package/dist/api/{auto-sleep.js → sleep/auto-sleep.js} +7 -12
- package/dist/api/sleep/dormant.d.ts +25 -0
- package/dist/api/sleep/dormant.js +64 -0
- package/dist/api/{learn.d.ts → sleep/learn.d.ts} +5 -4
- package/dist/api/sleep/learn.js +138 -0
- package/dist/api/sleep/sleep-run.d.ts +38 -0
- package/dist/api/{sleep-run.js → sleep/sleep-run.js} +54 -45
- package/dist/api/{sleep.d.ts → sleep/sleep.d.ts} +17 -11
- package/dist/api/sleep/sleep.js +9 -0
- package/dist/api/status.d.ts +3 -1
- package/dist/api/status.js +3 -1
- package/dist/api/store-init.d.ts +4 -1
- package/dist/api/store-init.js +4 -1
- package/dist/api/tokens.d.ts +10 -9
- package/dist/api/tokens.js +9 -10
- package/dist/api/types.d.ts +27 -12
- package/dist/api/types.js +13 -4
- package/dist/capture/caller-session.d.ts +8 -2
- package/dist/capture/caller-session.js +16 -6
- package/dist/capture/capture-error.d.ts +3 -1
- package/dist/capture/capture-error.js +3 -1
- package/dist/capture/codex-patch.js +7 -2
- package/dist/capture/command.d.ts +4 -2
- package/dist/capture/command.js +34 -15
- package/dist/capture/compact-resume-caller.js +15 -8
- package/dist/capture/compact.d.ts +8 -5
- package/dist/capture/compact.js +34 -23
- package/dist/capture/compaction-items-caller.js +9 -3
- package/dist/capture/compaction-record.d.ts +4 -3
- package/dist/capture/compaction-record.js +20 -12
- package/dist/capture/compaction-spool.d.ts +18 -9
- package/dist/capture/compaction-spool.js +105 -63
- package/dist/capture/copilot-transcript.d.ts +11 -3
- package/dist/capture/copilot-transcript.js +16 -6
- package/dist/capture/extract.js +20 -8
- package/dist/capture/failure-caller.js +23 -12
- package/dist/capture/failure-reading.d.ts +10 -3
- package/dist/capture/failure-reading.js +24 -7
- package/dist/capture/pre-compact-caller.js +11 -4
- package/dist/capture/session-digest.d.ts +15 -4
- package/dist/capture/session-digest.js +39 -13
- package/dist/capture/session-end-caller.d.ts +4 -1
- package/dist/capture/session-end-caller.js +20 -8
- package/dist/capture/session-texts.d.ts +6 -2
- package/dist/capture/session-texts.js +22 -7
- package/dist/capture/session-worker.d.ts +4 -2
- package/dist/capture/session-worker.js +58 -17
- package/dist/capture/transcript.d.ts +13 -4
- package/dist/capture/transcript.js +32 -10
- package/dist/capture/working-state.d.ts +13 -4
- package/dist/capture/working-state.js +50 -56
- package/dist/cli/api-context.d.ts +14 -2
- package/dist/cli/api-context.js +45 -2
- package/dist/cli/audit.js +33 -33
- package/dist/cli/auth.js +23 -31
- package/dist/cli/briefs.d.ts +1 -1
- package/dist/cli/briefs.js +20 -15
- package/dist/cli/card.d.ts +1 -1
- package/dist/cli/card.js +56 -73
- package/dist/cli/client.d.ts +12 -5
- package/dist/cli/client.js +53 -23
- package/dist/cli/compact-resume-payload.d.ts +4 -1
- package/dist/cli/compact-resume-payload.js +12 -5
- package/dist/cli/context.js +43 -18
- package/dist/cli/continuity.d.ts +5 -5
- package/dist/cli/continuity.js +90 -107
- package/dist/cli/curate.d.ts +5 -4
- package/dist/cli/curate.js +55 -77
- package/dist/cli/dag.d.ts +1 -1
- package/dist/cli/dag.js +14 -17
- package/dist/cli/decisions.js +30 -30
- package/dist/cli/eval.js +16 -21
- package/dist/cli/exit.d.ts +4 -1
- package/dist/cli/exit.js +10 -2
- package/dist/cli/explain.js +12 -11
- package/dist/cli/flag-values.d.ts +1 -1
- package/dist/cli/flag-values.js +9 -18
- package/dist/cli/github.d.ts +6 -0
- package/dist/cli/github.js +25 -13
- package/dist/cli/goals.d.ts +1 -1
- package/dist/cli/goals.js +39 -56
- package/dist/cli/graph.d.ts +1 -1
- package/dist/cli/graph.js +15 -11
- package/dist/cli/hook-runtime.d.ts +34 -10
- package/dist/cli/hook-runtime.js +41 -16
- package/dist/cli/incidents.d.ts +1 -1
- package/dist/cli/incidents.js +25 -25
- package/dist/cli/init.d.ts +1 -1
- package/dist/cli/init.js +35 -20
- package/dist/cli/install-steps.d.ts +12 -3
- package/dist/cli/install-steps.js +42 -18
- package/dist/cli/last-sleep.d.ts +4 -1
- package/dist/cli/last-sleep.js +9 -4
- package/dist/cli/maintenance.d.ts +1 -1
- package/dist/cli/maintenance.js +11 -12
- package/dist/cli/notes.d.ts +1 -1
- package/dist/cli/notes.js +8 -5
- package/dist/cli/object-verbs.d.ts +5 -5
- package/dist/cli/object-verbs.js +13 -16
- package/dist/cli/open-browser.js +11 -2
- package/dist/cli/playbooks.d.ts +3 -3
- package/dist/cli/playbooks.js +40 -32
- package/dist/cli/predictions.js +17 -22
- package/dist/cli/print.js +4 -2
- package/dist/cli/projects.js +21 -11
- package/dist/cli/quality-repair-once.d.ts +1 -1
- package/dist/cli/quality-repair-once.js +7 -6
- package/dist/cli/recall.js +129 -93
- package/dist/cli/refine-llm.d.ts +15 -4
- package/dist/cli/refine-llm.js +17 -7
- package/dist/cli/remember.js +51 -55
- package/dist/cli/scheduler.d.ts +4 -1
- package/dist/cli/scheduler.js +9 -5
- package/dist/cli/serve.js +28 -18
- package/dist/cli/session-hooks.d.ts +2 -6
- package/dist/cli/session-hooks.js +140 -112
- package/dist/cli/setup.d.ts +1 -1
- package/dist/cli/setup.js +56 -34
- package/dist/cli/shared.d.ts +4 -2
- package/dist/cli/shared.js +26 -11
- package/dist/cli/slack.js +15 -24
- package/dist/cli/sleep-render.d.ts +3 -1
- package/dist/cli/sleep-render.js +8 -5
- package/dist/cli/sleep.js +16 -8
- package/dist/cli/status.d.ts +4 -4
- package/dist/cli/status.js +32 -27
- package/dist/cli/stdin.d.ts +10 -3
- package/dist/cli/stdin.js +10 -3
- package/dist/cli/transfer.d.ts +4 -4
- package/dist/cli/transfer.js +97 -82
- package/dist/cli/usage.d.ts +1 -1
- package/dist/cli/usage.js +1 -1
- package/dist/cli/verb-row.d.ts +2 -0
- package/dist/cli/verbs/health.js +2 -0
- package/dist/cli/verbs/memory.js +47 -53
- package/dist/cli/verbs/objects.js +16 -7
- package/dist/cli/verbs/sessions.js +4 -2
- package/dist/cli/versioned-verbs.d.ts +8 -7
- package/dist/cli/versioned-verbs.js +31 -21
- package/dist/cli.js +14 -18
- package/dist/connectors/dlq.d.ts +6 -6
- package/dist/connectors/dlq.js +12 -7
- package/dist/connectors/github/backfill.d.ts +4 -4
- package/dist/connectors/github/backfill.js +6 -4
- package/dist/connectors/github/deletion.d.ts +6 -4
- package/dist/connectors/github/deletion.js +5 -4
- package/dist/connectors/github/dlq.d.ts +8 -6
- package/dist/connectors/github/dlq.js +11 -5
- package/dist/connectors/github/ingest.d.ts +2 -2
- package/dist/connectors/github/ingest.js +9 -5
- package/dist/connectors/github/octokit-client.d.ts +3 -1
- package/dist/connectors/github/octokit-client.js +7 -2
- package/dist/connectors/github/ratelimit.d.ts +6 -2
- package/dist/connectors/github/ratelimit.js +6 -2
- package/dist/connectors/github/signature.d.ts +14 -3
- package/dist/connectors/github/signature.js +17 -3
- package/dist/connectors/github/tenant-routing.d.ts +6 -4
- package/dist/connectors/github/tenant-routing.js +6 -5
- package/dist/connectors/github/transform.js +50 -67
- package/dist/connectors/github/types.d.ts +10 -3
- package/dist/connectors/github/types.js +6 -2
- package/dist/connectors/github/webhook.d.ts +5 -5
- package/dist/connectors/github/webhook.js +36 -23
- package/dist/connectors/ingest.d.ts +5 -3
- package/dist/connectors/ingest.js +3 -3
- package/dist/connectors/slack/backfill.d.ts +5 -5
- package/dist/connectors/slack/backfill.js +3 -3
- package/dist/connectors/slack/deletion.d.ts +4 -4
- package/dist/connectors/slack/deletion.js +6 -5
- package/dist/connectors/slack/dlq.d.ts +4 -4
- package/dist/connectors/slack/dlq.js +6 -6
- package/dist/connectors/slack/ingest.d.ts +6 -4
- package/dist/connectors/slack/ingest.js +5 -4
- package/dist/connectors/slack/signature.d.ts +4 -1
- package/dist/connectors/slack/tenant-routing.d.ts +6 -4
- package/dist/connectors/slack/tenant-routing.js +6 -5
- package/dist/connectors/slack/transform.d.ts +6 -2
- package/dist/connectors/slack/transform.js +6 -2
- package/dist/connectors/slack/types.d.ts +3 -1
- package/dist/connectors/slack/web-client.js +8 -3
- package/dist/connectors/slack/webhook.d.ts +5 -5
- package/dist/connectors/slack/webhook.js +19 -11
- package/dist/connectors/slack/workspaces.d.ts +7 -3
- package/dist/connectors/slack/workspaces.js +7 -3
- package/dist/connectors/store.d.ts +8 -0
- package/dist/connectors/store.js +2 -0
- package/dist/consolidate/conflicts.js +24 -10
- package/dist/consolidate/dag-summary.js +2 -1
- package/dist/consolidate/dag.d.ts +10 -5
- package/dist/consolidate/dag.js +45 -39
- package/dist/consolidate/decay.js +19 -6
- package/dist/consolidate/dedupe.d.ts +14 -5
- package/dist/consolidate/dedupe.js +28 -17
- package/dist/consolidate/flush-units.d.ts +4 -1
- package/dist/consolidate/flush-units.js +4 -1
- package/dist/consolidate/half-life-migration.d.ts +18 -8
- package/dist/consolidate/half-life-migration.js +48 -18
- package/dist/consolidate/llm-passes.js +27 -11
- package/dist/consolidate/memory-value-weights.d.ts +6 -2
- package/dist/consolidate/memory-value-weights.js +6 -2
- package/dist/consolidate/memory-value.d.ts +30 -10
- package/dist/consolidate/memory-value.js +37 -14
- package/dist/consolidate/merge.d.ts +4 -1
- package/dist/consolidate/merge.js +47 -37
- package/dist/consolidate/overlap-index.d.ts +8 -2
- package/dist/consolidate/overlap-index.js +11 -4
- package/dist/consolidate/physics-pass.d.ts +3 -1
- package/dist/consolidate/physics-pass.js +10 -7
- package/dist/consolidate/replay.d.ts +11 -4
- package/dist/consolidate/replay.js +19 -7
- package/dist/consolidate/run.d.ts +13 -5
- package/dist/consolidate/run.js +4 -4
- package/dist/consolidate/sleep.d.ts +14 -6
- package/dist/consolidate/sleep.js +42 -39
- package/dist/consolidate/trace.d.ts +7 -2
- package/dist/consolidate/trace.js +7 -2
- package/dist/consolidate/traces.js +27 -30
- package/dist/core/ablation.d.ts +9 -3
- package/dist/core/ablation.js +14 -4
- package/dist/core/active-scope.d.ts +3 -1
- package/dist/core/active-scope.js +3 -1
- package/dist/core/agent-memory-tools.d.ts +2 -0
- package/dist/core/agent-memory-tools.js +2 -0
- package/dist/core/ambient.d.ts +4 -3
- package/dist/core/ambient.js +8 -6
- package/dist/core/api-errors.d.ts +9 -3
- package/dist/core/api-errors.js +9 -3
- package/dist/core/capture-contract.d.ts +4 -1
- package/dist/core/capture-contract.js +27 -8
- package/dist/core/compare.d.ts +24 -8
- package/dist/core/compare.js +24 -8
- package/dist/core/config.d.ts +18 -9
- package/dist/core/config.js +38 -29
- package/dist/core/cosine.d.ts +4 -1
- package/dist/core/cosine.js +4 -1
- package/dist/core/handoff.d.ts +7 -2
- package/dist/core/handoff.js +4 -1
- package/dist/core/markdown.js +22 -17
- package/dist/core/memory-audit.js +14 -3
- package/dist/core/memory-quality.d.ts +12 -3
- package/dist/core/memory-quality.js +57 -21
- package/dist/core/memory.d.ts +87 -30
- package/dist/core/memory.js +82 -33
- package/dist/core/merged-row.d.ts +8 -2
- package/dist/core/merged-row.js +10 -3
- package/dist/core/package-root.d.ts +3 -1
- package/dist/core/package-root.js +3 -1
- package/dist/core/particle-refresh.d.ts +8 -0
- package/dist/core/particle-refresh.js +22 -0
- package/dist/core/physics-config.d.ts +4 -1
- package/dist/core/physics-config.js +6 -2
- package/dist/core/physics.d.ts +39 -11
- package/dist/core/physics.js +71 -21
- package/dist/core/project-identity.d.ts +34 -17
- package/dist/core/project-identity.js +35 -18
- package/dist/core/project-remote.d.ts +8 -4
- package/dist/core/project-remote.js +31 -14
- package/dist/core/recall-scope.d.ts +33 -11
- package/dist/core/recall-scope.js +42 -15
- package/dist/core/rejection-digest.d.ts +7 -0
- package/dist/core/rejection-digest.js +13 -0
- package/dist/core/salience.d.ts +3 -1
- package/dist/core/salience.js +10 -4
- package/dist/core/search-types.d.ts +15 -2
- package/dist/core/search-types.js +11 -0
- package/dist/dashboard/dashboard-actions.d.ts +2 -2
- package/dist/dashboard/dashboard-actions.js +18 -7
- package/dist/dashboard/dashboard-queries.js +2 -7
- package/dist/dashboard/dashboard-snapshot.d.ts +2 -2
- package/dist/dashboard/dashboard-snapshot.js +5 -7
- package/dist/dashboard/dashboard.js +22 -8
- package/dist/db/backup.js +2 -2
- package/dist/db/busy.d.ts +10 -3
- package/dist/db/busy.js +27 -5
- package/dist/db/connect.d.ts +10 -2
- package/dist/db/connect.js +8 -2
- package/dist/db/continuity.d.ts +1 -1
- package/dist/db/continuity.js +27 -11
- package/dist/db/meta.d.ts +4 -1
- package/dist/db/meta.js +4 -1
- package/dist/db/migrate.d.ts +10 -5
- package/dist/db/migrate.js +40 -20
- package/dist/db/migrations/index.d.ts +1 -1
- package/dist/db/migrations/index.js +3 -1
- package/dist/db/migrations/types.d.ts +2 -1
- package/dist/db/migrations/v11.js +1 -0
- package/dist/db/migrations/v12.js +2 -1
- package/dist/db/migrations/v14.js +2 -0
- package/dist/db/migrations/v15.js +4 -2
- package/dist/db/migrations/v16.js +6 -3
- package/dist/db/migrations/v17.js +2 -1
- package/dist/db/migrations/v19.js +4 -2
- package/dist/db/migrations/v20.js +2 -1
- package/dist/db/migrations/v22.js +12 -6
- package/dist/db/migrations/v23.js +6 -3
- package/dist/db/migrations/v24.js +6 -3
- package/dist/db/migrations/v25.js +4 -2
- package/dist/db/migrations/v26.js +4 -2
- package/dist/db/migrations/v27.js +6 -3
- package/dist/db/migrations/v28.js +4 -2
- package/dist/db/migrations/v29.js +4 -2
- package/dist/db/migrations/v30.js +6 -3
- package/dist/db/migrations/v31.js +4 -2
- package/dist/db/migrations/v32.js +6 -3
- package/dist/db/migrations/v33.js +4 -2
- package/dist/db/migrations/v34.js +2 -1
- package/dist/db/migrations/v35.js +2 -1
- package/dist/db/migrations/v36.js +2 -1
- package/dist/db/migrations/v37.js +10 -5
- package/dist/db/migrations/v38.js +10 -5
- package/dist/db/migrations/v39.js +14 -6
- package/dist/db/migrations/v40.js +4 -2
- package/dist/db/migrations/v41.js +4 -2
- package/dist/db/migrations/v42.js +2 -1
- package/dist/db/migrations/v44.js +4 -2
- package/dist/db/migrations/v45.js +4 -2
- package/dist/db/migrations/v49.js +2 -1
- package/dist/db/migrations/v50.js +4 -2
- package/dist/db/migrations/v51.js +4 -2
- package/dist/db/migrations/v52.js +2 -1
- package/dist/db/migrations/v53.js +8 -4
- package/dist/db/migrations/v54.js +2 -1
- package/dist/db/migrations/v55.js +4 -2
- package/dist/db/migrations/v56.d.ts +3 -0
- package/dist/db/migrations/v56.js +28 -0
- package/dist/db/open.d.ts +24 -12
- package/dist/db/open.js +25 -13
- package/dist/db/physics-state.d.ts +8 -8
- package/dist/db/physics-state.js +17 -50
- package/dist/db/raw-archive-mirror-cleanup.d.ts +4 -2
- package/dist/db/raw-archive-mirror-cleanup.js +6 -4
- package/dist/db/request-stores.d.ts +20 -5
- package/dist/db/request-stores.js +15 -5
- package/dist/db/tables.d.ts +2 -1
- package/dist/db/tables.js +12 -4
- package/dist/db/vector-store.d.ts +13 -4
- package/dist/db/vector-store.js +35 -14
- package/dist/db/wal-checkpointer.d.ts +2 -1
- package/dist/db/wal-checkpointer.js +19 -7
- package/dist/doctor.d.ts +7 -1
- package/dist/doctor.js +128 -46
- package/dist/embeddings/local.d.ts +8 -4
- package/dist/embeddings/local.js +11 -7
- package/dist/embeddings/provider.d.ts +19 -10
- package/dist/embeddings/provider.js +32 -27
- package/dist/embeddings/transformers.d.ts +16 -4
- package/dist/embeddings/transformers.js +32 -15
- package/dist/entry/json-hooks.d.ts +1 -1
- package/dist/entry/json-hooks.js +1 -1
- package/dist/entry/project-identity.js +2 -1
- package/dist/entry/session-text.d.ts +1 -1
- package/dist/entry/session-text.js +1 -1
- package/dist/entry/sqlite-handles.d.ts +10 -0
- package/dist/entry/sqlite-handles.js +9 -0
- package/dist/entry/store-kit.d.ts +50 -0
- package/dist/entry/store-kit.js +27 -0
- package/dist/entry/testing.d.ts +6 -0
- package/dist/entry/testing.js +7 -0
- package/dist/eval/eval-stats.d.ts +27 -8
- package/dist/eval/eval-stats.js +17 -5
- package/dist/eval/eval-suite.d.ts +3 -1
- package/dist/eval/eval-suite.js +409 -187
- package/dist/eval/eval.d.ts +8 -2
- package/dist/eval/eval.js +8 -2
- package/dist/eval/judgment.js +17 -7
- package/dist/graph/delta.d.ts +9 -42
- package/dist/graph/delta.js +17 -11
- package/dist/graph/extract.d.ts +10 -7
- package/dist/graph/extract.js +57 -25
- package/dist/graph/recall.d.ts +12 -4
- package/dist/graph/recall.js +30 -13
- package/dist/graph/stream.d.ts +18 -6
- package/dist/graph/stream.js +32 -10
- package/dist/graph/view.d.ts +19 -6
- package/dist/graph/view.js +42 -17
- package/dist/hooks/codex-session.js +2 -2
- package/dist/hooks/codex-wrapper.d.ts +3 -1
- package/dist/hooks/codex-wrapper.js +9 -4
- package/dist/hooks/copilot.d.ts +19 -5
- package/dist/hooks/copilot.js +54 -15
- package/dist/hooks/hook-blocks.d.ts +4 -1
- package/dist/hooks/hook-blocks.js +8 -3
- package/dist/hooks/json-hooks.d.ts +9 -5
- package/dist/hooks/json-hooks.js +72 -33
- package/dist/hooks/opencode.js +15 -5
- package/dist/hooks/shared.d.ts +27 -8
- package/dist/hooks/shared.js +57 -16
- package/dist/importers/core.d.ts +12 -4
- package/dist/importers/core.js +11 -10
- package/dist/importers/markdown-parse.d.ts +15 -5
- package/dist/importers/markdown-parse.js +16 -7
- package/dist/importers/markdown.js +6 -9
- package/dist/importers/sources.js +10 -23
- package/dist/importers/vault.d.ts +3 -3
- package/dist/importers/vault.js +61 -45
- package/dist/index.d.ts +33 -7
- package/dist/index.js +26 -8
- package/dist/learn/autolearn.d.ts +21 -6
- package/dist/learn/autolearn.js +57 -26
- package/dist/learn/churn-git.d.ts +4 -1
- package/dist/learn/churn-git.js +29 -5
- package/dist/learn/extract.d.ts +4 -1
- package/dist/learn/extract.js +17 -10
- package/dist/learn/forward-claim-detector.d.ts +17 -5
- package/dist/learn/forward-claim-detector.js +34 -15
- package/dist/learn/invalidation.d.ts +12 -6
- package/dist/learn/invalidation.js +62 -28
- package/dist/learn/roots.d.ts +3 -0
- package/dist/learn/roots.js +5 -0
- package/dist/mcp/admin-tools.d.ts +5 -5
- package/dist/mcp/admin-tools.js +28 -23
- package/dist/mcp/format.d.ts +1 -1
- package/dist/mcp/format.js +4 -2
- package/dist/mcp/framing.d.ts +3 -1
- package/dist/mcp/framing.js +20 -8
- package/dist/mcp/memory-tools.d.ts +3 -3
- package/dist/mcp/memory-tools.js +21 -20
- package/dist/mcp/protocol.d.ts +32 -16
- package/dist/mcp/protocol.js +12 -9
- package/dist/mcp/recall-tools.d.ts +3 -3
- package/dist/mcp/recall-tools.js +62 -74
- package/dist/mcp/request.d.ts +7 -5
- package/dist/mcp/request.js +61 -77
- package/dist/mcp/server.d.ts +3 -1
- package/dist/mcp/server.js +8 -3
- package/dist/mcp/session-state.d.ts +1 -1
- package/dist/mcp/session-state.js +4 -3
- package/dist/mcp/shared-gate.d.ts +3 -2
- package/dist/mcp/shared-gate.js +3 -2
- package/dist/mcp/stdio.d.ts +6 -3
- package/dist/mcp/stdio.js +59 -23
- package/dist/mcp/tool-args.d.ts +4 -1
- package/dist/mcp/tool-args.js +8 -3
- package/dist/mcp/tools.js +76 -32
- package/dist/objects/customer-notes.d.ts +12 -10
- package/dist/objects/customer-notes.js +21 -15
- package/dist/objects/decisions.d.ts +18 -10
- package/dist/objects/decisions.js +23 -17
- package/dist/objects/descriptor.js +2 -1
- package/dist/objects/fields.d.ts +4 -1
- package/dist/objects/fields.js +6 -2
- package/dist/objects/incidents.d.ts +14 -16
- package/dist/objects/incidents.js +29 -30
- package/dist/objects/lifecycle.d.ts +0 -4
- package/dist/objects/lifecycle.js +21 -24
- package/dist/objects/policies.d.ts +12 -16
- package/dist/objects/policies.js +17 -21
- package/dist/objects/processes.d.ts +16 -10
- package/dist/objects/processes.js +20 -15
- package/dist/objects/project-briefs.d.ts +13 -14
- package/dist/objects/project-briefs.js +33 -39
- package/dist/objects/skills.d.ts +10 -12
- package/dist/objects/skills.js +17 -22
- package/dist/postinstall.js +15 -7
- package/dist/predictions/planning-fallacy.d.ts +19 -6
- package/dist/predictions/planning-fallacy.js +4 -2
- package/dist/rerankers/clef.d.ts +8 -2
- package/dist/rerankers/clef.js +14 -9
- package/dist/rerankers/cross-encoder.d.ts +2 -1
- package/dist/rerankers/cross-encoder.js +19 -9
- package/dist/rerankers/index.js +2 -1
- package/dist/rerankers/jev.js +2 -1
- package/dist/rerankers/llm.d.ts +6 -2
- package/dist/rerankers/llm.js +8 -3
- package/dist/rerankers/remote.d.ts +3 -1
- package/dist/rerankers/remote.js +5 -2
- package/dist/rerankers/types.d.ts +6 -2
- package/dist/search/bm25-search.d.ts +3 -1
- package/dist/search/bm25-search.js +15 -2
- package/dist/search/boosts.js +4 -3
- package/dist/search/embed-memories.d.ts +12 -4
- package/dist/search/embed-memories.js +96 -58
- package/dist/search/engine.d.ts +11 -0
- package/dist/search/engine.js +14 -0
- package/dist/search/goal-boost.d.ts +10 -3
- package/dist/search/goal-boost.js +13 -6
- package/dist/search/hybrid-score.d.ts +4 -1
- package/dist/search/hybrid-score.js +4 -1
- package/dist/search/hybrid.d.ts +23 -8
- package/dist/search/hybrid.js +12 -7
- package/dist/search/multihop.js +14 -13
- package/dist/search/path-context.d.ts +10 -3
- package/dist/search/path-context.js +10 -3
- package/dist/search/physics-search.d.ts +9 -4
- package/dist/search/physics-search.js +38 -14
- package/dist/search/rerank.d.ts +2 -1
- package/dist/search/rerank.js +2 -1
- package/dist/search/rrf.d.ts +14 -5
- package/dist/search/rrf.js +11 -4
- package/dist/search/vector.d.ts +8 -2
- package/dist/search/vector.js +14 -8
- package/dist/server/auth.d.ts +19 -15
- package/dist/server/auth.js +68 -38
- package/dist/server/boot.d.ts +4 -1
- package/dist/server/boot.js +115 -67
- package/dist/server/client-ip.d.ts +17 -5
- package/dist/server/client-ip.js +56 -21
- package/dist/server/cursor.d.ts +10 -3
- package/dist/server/cursor.js +10 -3
- package/dist/server/deadline.d.ts +5 -2
- package/dist/server/deadline.js +10 -3
- package/dist/server/key-check-bounds.js +12 -4
- package/dist/server/lifecycle.d.ts +4 -1
- package/dist/server/lifecycle.js +10 -4
- package/dist/server/mcp-http.d.ts +2 -1
- package/dist/server/mcp-http.js +37 -22
- package/dist/server/rate-limit.d.ts +17 -5
- package/dist/server/rate-limit.js +55 -26
- package/dist/server/ready.js +7 -4
- package/dist/server/request.d.ts +15 -4
- package/dist/server/request.js +42 -15
- package/dist/server/route-checks.d.ts +4 -1
- package/dist/server/route-checks.js +8 -3
- package/dist/server/route-table.d.ts +8 -6
- package/dist/server/route-table.js +550 -97
- package/dist/server/routes/admin.d.ts +7 -7
- package/dist/server/routes/admin.js +36 -15
- package/dist/server/routes/customer-notes.d.ts +5 -5
- package/dist/server/routes/customer-notes.js +5 -4
- package/dist/server/routes/decisions.d.ts +5 -5
- package/dist/server/routes/decisions.js +12 -6
- package/dist/server/routes/incidents.d.ts +5 -5
- package/dist/server/routes/incidents.js +10 -4
- package/dist/server/routes/memories.d.ts +8 -8
- package/dist/server/routes/memories.js +12 -17
- package/dist/server/routes/object-routes.d.ts +8 -5
- package/dist/server/routes/object-routes.js +4 -2
- package/dist/server/routes/policies.d.ts +6 -6
- package/dist/server/routes/policies.js +11 -4
- package/dist/server/routes/predictions.d.ts +5 -5
- package/dist/server/routes/predictions.js +9 -4
- package/dist/server/routes/processes.d.ts +5 -5
- package/dist/server/routes/processes.js +15 -6
- package/dist/server/routes/project-briefs.d.ts +6 -6
- package/dist/server/routes/project-briefs.js +3 -2
- package/dist/server/routes/recall.d.ts +3 -3
- package/dist/server/routes/recall.js +21 -10
- package/dist/server/routes/skills.d.ts +6 -6
- package/dist/server/routes/skills.js +12 -4
- package/dist/server/server-detect.d.ts +24 -8
- package/dist/server/server-detect.js +57 -22
- package/dist/server/sleep-child.js +16 -10
- package/dist/server/sleep-offload.d.ts +8 -5
- package/dist/server/sleep-offload.js +40 -18
- package/dist/server/tls.d.ts +10 -2
- package/dist/server/tls.js +25 -5
- package/dist/server/types.d.ts +41 -24
- package/dist/server/validation.d.ts +4 -1
- package/dist/server/validation.js +22 -9
- package/dist/server.d.ts +17 -49
- package/dist/server.js +33 -40
- package/dist/sharing/global-store.d.ts +6 -12
- package/dist/sharing/global-store.js +8 -48
- package/dist/sharing/global-sync.d.ts +3 -1
- package/dist/sharing/global-sync.js +17 -7
- package/dist/sharing/project-merge.d.ts +25 -7
- package/dist/sharing/project-merge.js +49 -17
- package/dist/sharing/search-both.d.ts +8 -4
- package/dist/sharing/search-both.js +28 -14
- package/dist/sharing/share.d.ts +8 -4
- package/dist/sharing/share.js +40 -18
- package/dist/store/ambient.js +10 -5
- package/dist/store/audit-event.d.ts +2 -2
- package/dist/store/audit-event.js +8 -3
- package/dist/store/audit.d.ts +6 -3
- package/dist/store/audit.js +16 -6
- package/dist/store/auth.d.ts +4 -2
- package/dist/store/auth.js +63 -20
- package/dist/store/busy.d.ts +9 -0
- package/dist/store/busy.js +16 -0
- package/dist/store/candidates.d.ts +12 -5
- package/dist/store/candidates.js +90 -41
- package/dist/store/capture-write.d.ts +2 -1
- package/dist/store/capture-write.js +2 -1
- package/dist/store/card-detail.d.ts +4 -4
- package/dist/store/card-detail.js +15 -8
- package/dist/store/cards.d.ts +24 -10
- package/dist/store/cards.js +97 -63
- package/dist/store/compaction-caller.d.ts +2 -1
- package/dist/store/compaction-caller.js +2 -1
- package/dist/store/compactions-record.d.ts +14 -8
- package/dist/store/compactions-record.js +101 -37
- package/dist/store/compactions.js +35 -15
- package/dist/store/conflicts.d.ts +16 -5
- package/dist/store/conflicts.js +104 -48
- package/dist/store/connectors/dlq.d.ts +17 -5
- package/dist/store/connectors/dlq.js +58 -6
- package/dist/store/connectors/event-log.d.ts +122 -0
- package/dist/store/connectors/event-log.js +25 -0
- package/dist/store/connectors/github.d.ts +6 -3
- package/dist/store/connectors/github.js +30 -48
- package/dist/store/connectors/slack.d.ts +2 -1
- package/dist/store/connectors/slack.js +31 -47
- package/dist/store/dashboard-reads.d.ts +7 -3
- package/dist/store/dashboard-reads.js +32 -10
- package/dist/store/delete-and-batch.d.ts +17 -11
- package/dist/store/delete-and-batch.js +70 -28
- package/dist/store/delivery-recorder.d.ts +10 -7
- package/dist/store/delivery-recorder.js +70 -37
- package/dist/store/descendant-page.d.ts +2 -1
- package/dist/store/descendant-page.js +26 -10
- package/dist/store/diagnostics.d.ts +2 -1
- package/dist/store/diagnostics.js +2 -1
- package/dist/store/doctor-reads.d.ts +2 -1
- package/dist/store/doctor-reads.js +13 -5
- package/dist/store/dormant.d.ts +19 -11
- package/dist/store/dormant.js +45 -19
- package/dist/store/embeddings/index.d.ts +13 -9
- package/dist/store/embeddings/index.js +19 -12
- package/dist/store/entry-reads.d.ts +72 -21
- package/dist/store/entry-reads.js +215 -69
- package/dist/store/entry-row.d.ts +10 -6
- package/dist/store/entry-row.js +26 -14
- package/dist/store/entry-writes.d.ts +28 -13
- package/dist/store/entry-writes.js +61 -22
- package/dist/store/failure-log-at.js +1 -1
- package/dist/store/failure-log.d.ts +4 -2
- package/dist/store/failure-log.js +13 -6
- package/dist/store/gated-write.d.ts +3 -3
- package/dist/store/gated-write.js +3 -3
- package/dist/store/goals.d.ts +5 -4
- package/dist/store/goals.js +11 -12
- package/dist/store/graph-apply.d.ts +21 -0
- package/dist/{graph/write.js → store/graph-apply.js} +31 -11
- package/dist/store/graph-queue.d.ts +9 -6
- package/dist/store/graph-queue.js +15 -10
- package/dist/store/graph-reads.d.ts +16 -11
- package/dist/store/graph-reads.js +29 -19
- package/dist/store/graph-rows.d.ts +41 -3
- package/dist/store/graph-rows.js +10 -7
- package/dist/store/graph-view-rows.js +15 -7
- package/dist/store/graph-writes.d.ts +16 -10
- package/dist/store/graph-writes.js +59 -36
- package/dist/store/half-life.js +2 -2
- package/dist/store/handoffs.d.ts +13 -7
- package/dist/store/handoffs.js +44 -22
- package/dist/store/index-and-stats.d.ts +2 -2
- package/dist/store/index-and-stats.js +6 -5
- package/dist/store/index.d.ts +4 -2
- package/dist/store/index.js +2 -1
- package/dist/store/key-audit.d.ts +2 -1
- package/dist/store/key-audit.js +2 -1
- package/dist/store/key-writes.d.ts +2 -1
- package/dist/store/key-writes.js +9 -2
- package/dist/store/ledger-turn.d.ts +4 -1
- package/dist/store/ledger-turn.js +7 -2
- package/dist/store/mirrors.d.ts +11 -4
- package/dist/store/mirrors.js +96 -19
- package/dist/store/narrow.d.ts +6 -0
- package/dist/store/narrow.js +11 -0
- package/dist/store/open.d.ts +6 -3
- package/dist/store/open.js +20 -10
- package/dist/store/pilot-arm.d.ts +2 -1
- package/dist/store/pilot-arm.js +18 -6
- package/dist/store/planning-fallacy-evidence.d.ts +2 -2
- package/dist/store/planning-fallacy-evidence.js +8 -5
- package/dist/store/port/agent-import.d.ts +62 -0
- package/dist/store/port/agent-import.js +2 -0
- package/dist/store/port/consolidation.d.ts +129 -0
- package/dist/store/port/consolidation.js +2 -0
- package/dist/store/port/learning.d.ts +19 -0
- package/dist/store/port/learning.js +2 -0
- package/dist/store/port/local-files.d.ts +18 -0
- package/dist/store/port/local-files.js +2 -0
- package/dist/store/port/promotion.d.ts +20 -0
- package/dist/store/port/promotion.js +3 -0
- package/dist/store/port-groups.d.ts +160 -0
- package/dist/store/port-groups.js +2 -0
- package/dist/store/port.d.ts +261 -219
- package/dist/store/port.js +3 -9
- package/dist/store/predictions.d.ts +14 -10
- package/dist/store/predictions.js +37 -17
- package/dist/store/project-tags.d.ts +4 -1
- package/dist/store/project-tags.js +16 -5
- package/dist/store/quality-repair.d.ts +8 -4
- package/dist/store/quality-repair.js +53 -20
- package/dist/store/quarantine.d.ts +1 -0
- package/dist/store/quarantine.js +23 -9
- package/dist/store/raw-archive.d.ts +5 -4
- package/dist/store/raw-archive.js +11 -10
- package/dist/store/recall-trace.d.ts +22 -17
- package/dist/store/recall-trace.js +128 -64
- package/dist/store/rejected-values.d.ts +15 -10
- package/dist/store/rejected-values.js +46 -20
- package/dist/store/rejection.d.ts +12 -11
- package/dist/store/rejection.js +18 -19
- package/dist/store/report-reads.d.ts +2 -1
- package/dist/store/report-reads.js +2 -1
- package/dist/store/rows.d.ts +7 -5
- package/dist/store/rows.js +20 -13
- package/dist/store/rule-sql.d.ts +7 -3
- package/dist/store/rule-sql.js +26 -13
- package/dist/store/search-rows.d.ts +16 -11
- package/dist/store/search-rows.js +54 -32
- package/dist/store/sessions.d.ts +12 -10
- package/dist/store/sessions.js +40 -21
- package/dist/store/set-aside.d.ts +2 -2
- package/dist/store/set-aside.js +18 -5
- package/dist/store/sqlite/agent-import.d.ts +3 -0
- package/dist/store/sqlite/agent-import.js +77 -0
- package/dist/store/sqlite/cards-group.d.ts +6 -0
- package/dist/store/sqlite/cards-group.js +37 -0
- package/dist/store/sqlite/conflicts-group.d.ts +6 -0
- package/dist/store/sqlite/conflicts-group.js +18 -0
- package/dist/store/sqlite/connector-events-group.d.ts +2 -1
- package/dist/store/sqlite/connector-events-group.js +17 -6
- package/dist/store/sqlite/connector-writes-group.d.ts +2 -1
- package/dist/store/sqlite/connector-writes-group.js +12 -5
- package/dist/store/sqlite/consolidation-group.d.ts +4 -0
- package/dist/store/sqlite/consolidation-group.js +64 -0
- package/dist/store/sqlite/dag-reads-group.js +1 -1
- package/dist/store/sqlite/dormant-group.d.ts +6 -0
- package/dist/store/sqlite/dormant-group.js +29 -0
- package/dist/store/sqlite/entry-writes-group.d.ts +9 -6
- package/dist/store/sqlite/entry-writes-group.js +37 -14
- package/dist/store/sqlite/error-codec.d.ts +4 -2
- package/dist/store/sqlite/error-codec.js +32 -10
- package/dist/store/sqlite/executor-counts.js +2 -1
- package/dist/store/sqlite/executor.d.ts +8 -3
- package/dist/store/sqlite/executor.js +56 -18
- package/dist/store/sqlite/global-promote.d.ts +5 -0
- package/dist/store/sqlite/global-promote.js +48 -0
- package/dist/store/sqlite/goals-group.d.ts +6 -0
- package/dist/store/sqlite/goals-group.js +23 -0
- package/dist/store/sqlite/graph-reads-group.d.ts +2 -1
- package/dist/store/sqlite/graph-reads-group.js +2 -1
- package/dist/store/sqlite/held-connection.d.ts +8 -0
- package/dist/store/sqlite/held-connection.js +34 -7
- package/dist/store/sqlite/last-recall-group.d.ts +15 -0
- package/dist/store/sqlite/last-recall-group.js +62 -0
- package/dist/store/sqlite/learning-group.d.ts +4 -0
- package/dist/store/sqlite/learning-group.js +17 -0
- package/dist/store/sqlite/maintenance-groups.d.ts +6 -0
- package/dist/store/sqlite/maintenance-groups.js +61 -0
- package/dist/store/sqlite/object-rows.d.ts +6 -3
- package/dist/store/sqlite/object-rows.js +34 -5
- package/dist/store/sqlite/objects-group.d.ts +5 -4
- package/dist/store/sqlite/objects-group.js +97 -38
- package/dist/store/sqlite/predictions-group.d.ts +2 -1
- package/dist/store/sqlite/predictions-group.js +4 -2
- package/dist/store/sqlite/promotion-group.d.ts +3 -0
- package/dist/store/sqlite/promotion-group.js +10 -0
- package/dist/store/sqlite/quarantine-group.d.ts +2 -1
- package/dist/store/sqlite/quarantine-group.js +4 -2
- package/dist/store/sqlite/reports-group.d.ts +6 -0
- package/dist/store/sqlite/reports-group.js +33 -0
- package/dist/store/sqlite/request-scope.d.ts +6 -0
- package/dist/store/sqlite/request-scope.js +18 -0
- package/dist/store/sqlite/sessions-group.d.ts +6 -0
- package/dist/store/sqlite/sessions-group.js +46 -0
- package/dist/store/sqlite/store.d.ts +22 -18
- package/dist/store/sqlite/store.js +95 -33
- package/dist/store/sqlite/vector-pack.js +2 -1
- package/dist/store/sqlite/vector-reads-group.js +2 -1
- package/dist/store/sqlite/worker-jobs.d.ts +2 -1
- package/dist/store/sqlite/worker-jobs.js +19 -7
- package/dist/store/sqlite/worker-ops.d.ts +10 -5
- package/dist/store/sqlite/worker-ops.js +6 -3
- package/dist/store/sqlite/worker-store.d.ts +4 -3
- package/dist/store/sqlite/worker-store.js +24 -14
- package/dist/store/summaries.d.ts +25 -11
- package/dist/store/summaries.js +84 -27
- package/dist/store/summary-dirty.d.ts +2 -1
- package/dist/store/summary-dirty.js +2 -1
- package/dist/store/tenant.d.ts +3 -2
- package/dist/store/tenant.js +5 -4
- package/dist/store/token-ledger-rows.js +8 -4
- package/dist/store/token-ledger.d.ts +19 -13
- package/dist/store/token-ledger.js +27 -14
- package/dist/store/tombstone-checks.d.ts +4 -1
- package/dist/store/tombstone-checks.js +10 -1
- package/dist/store/usage-reports.js +2 -1
- package/dist/store/vector-index.d.ts +8 -5
- package/dist/store/vector-index.js +28 -11
- package/dist/store/working-memory.d.ts +6 -4
- package/dist/store/working-memory.js +14 -9
- package/dist/support-bundle.js +10 -5
- package/dist/trust/quarantine.d.ts +1 -2
- package/dist/trust/quarantine.js +1 -5
- package/dist/trust/reject-flow.d.ts +12 -3
- package/dist/trust/reject-flow.js +12 -4
- package/dist/util/anthropic-messages.d.ts +7 -2
- package/dist/util/anthropic-messages.js +18 -7
- package/dist/util/atomic-write.d.ts +8 -3
- package/dist/util/atomic-write.js +36 -21
- package/dist/util/compaction-items.d.ts +4 -1
- package/dist/util/compaction-items.js +8 -2
- package/dist/util/crash-handlers.d.ts +7 -2
- package/dist/util/crash-handlers.js +13 -4
- package/dist/util/env.d.ts +26 -5
- package/dist/util/env.js +87 -25
- package/dist/util/format.d.ts +2 -0
- package/dist/util/format.js +4 -0
- package/dist/util/home-path.js +12 -6
- package/dist/util/hook-payload.d.ts +3 -1
- package/dist/util/hook-payload.js +3 -1
- package/dist/util/http-retry.d.ts +12 -6
- package/dist/util/http-retry.js +16 -6
- package/dist/util/http-util.d.ts +20 -5
- package/dist/util/http-util.js +28 -9
- package/dist/util/json.d.ts +4 -1
- package/dist/util/json.js +4 -1
- package/dist/util/keyset.js +2 -1
- package/dist/util/limits.js +4 -2
- package/dist/util/log.d.ts +13 -5
- package/dist/util/log.js +29 -6
- package/dist/util/net.d.ts +5 -0
- package/dist/util/net.js +19 -0
- package/dist/util/real-path.d.ts +2 -1
- package/dist/util/real-path.js +4 -3
- package/dist/util/request-scope.d.ts +16 -4
- package/dist/util/request-scope.js +19 -6
- package/dist/util/same-text.d.ts +10 -3
- package/dist/util/same-text.js +10 -3
- package/dist/util/secret-detect.d.ts +24 -7
- package/dist/util/secret-detect.js +49 -14
- package/dist/util/spawn-argv.d.ts +11 -0
- package/dist/util/spawn-argv.js +66 -0
- package/dist/util/sql.d.ts +3 -0
- package/dist/util/sql.js +6 -0
- package/dist/util/sqlite-blocked.d.ts +15 -4
- package/dist/util/sqlite-blocked.js +19 -6
- package/dist/util/stored-json.d.ts +4 -1
- package/dist/util/stored-json.js +6 -2
- package/dist/util/stream-tee.d.ts +2 -1
- package/dist/util/stream-tee.js +8 -5
- package/dist/util/transcript-tail.d.ts +4 -1
- package/dist/util/transcript-tail.js +4 -1
- package/dist/util/vector-codec.d.ts +4 -0
- package/dist/util/vector-codec.js +15 -0
- package/dist/util/version.d.ts +8 -3
- package/dist/util/version.js +8 -3
- package/dist/util/write-budget.d.ts +7 -2
- package/dist/util/write-budget.js +5 -2
- package/dist/util/yaml.d.ts +4 -1
- package/dist/util/yaml.js +4 -1
- 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 +4 -1
- package/scripts/postinstall.cjs +3 -1
- package/dist/api/audit.js +0 -56
- package/dist/api/cards.d.ts +0 -42
- package/dist/api/conflicts.d.ts +0 -28
- package/dist/api/conflicts.js +0 -61
- package/dist/api/dormant.d.ts +0 -14
- package/dist/api/dormant.js +0 -58
- package/dist/api/goals.d.ts +0 -18
- package/dist/api/graph.d.ts +0 -8
- package/dist/api/graph.js +0 -7
- package/dist/api/learn.js +0 -124
- package/dist/api/memories.d.ts +0 -23
- package/dist/api/memories.js +0 -46
- package/dist/api/objects.d.ts +0 -9
- package/dist/api/on-store.d.ts +0 -16
- package/dist/api/on-store.js +0 -38
- package/dist/api/outcome.d.ts +0 -19
- package/dist/api/outcome.js +0 -21
- package/dist/api/predictions.d.ts +0 -11
- package/dist/api/promote.d.ts +0 -36
- package/dist/api/promote.js +0 -65
- package/dist/api/recall-core.d.ts +0 -4
- package/dist/api/recall-core.js +0 -120
- package/dist/api/recall-finish.d.ts +0 -53
- package/dist/api/recall-finish.js +0 -30
- package/dist/api/recall-history.d.ts +0 -64
- package/dist/api/recall-history.js +0 -159
- package/dist/api/recall-record.d.ts +0 -43
- package/dist/api/recall-record.js +0 -78
- package/dist/api/recall-request.js +0 -121
- package/dist/api/recall.d.ts +0 -6
- package/dist/api/refine.d.ts +0 -7
- package/dist/api/refine.js +0 -10
- package/dist/api/session-owners.d.ts +0 -4
- package/dist/api/session-owners.js +0 -17
- package/dist/api/sleep-run.d.ts +0 -26
- package/dist/api/sleep.js +0 -10
- package/dist/cli/lenient-id.d.ts +0 -2
- package/dist/cli/lenient-id.js +0 -13
- package/dist/graph/write.d.ts +0 -14
- package/dist/store/sqlite/busy.d.ts +0 -3
- package/dist/store/sqlite/busy.js +0 -8
- package/dist/store/sqlite/local.d.ts +0 -21
- package/dist/store/sqlite/local.js +0 -39
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
/** Paginated backfill of the GitHub issues, issue-comments and PR-review-comments streams, each with its own
|
|
2
|
-
* An HWM is
|
|
1
|
+
/** Paginated backfill of the GitHub issues, issue-comments and PR-review-comments streams, each with its own HWM.
|
|
2
|
+
* An HWM (high-water mark) is saved only after its stream fully drains, so a crash in stream 2 keeps stream 1.
|
|
3
3
|
* `repository.private` is left undefined (REST lists omit it), so scopeFromRepository falls through to private. */
|
|
4
4
|
import { readCursors, seedCursors, writeHwm } from '../../store/connectors/github.js';
|
|
5
5
|
import { ingestEvent } from './ingest.js';
|
|
6
6
|
import { isJsonObject } from '../../util/json.js';
|
|
7
|
+
import { MINUTE_MS } from '../../util/time.js';
|
|
7
8
|
const API = 'https://api.github.com';
|
|
8
9
|
/** Build a synthetic `repository` from the known repo full name, because REST list items often omit it.
|
|
9
10
|
* `private` stays undefined so scopeFromRepository falls through to private. */
|
|
@@ -82,9 +83,10 @@ async function drainStream(ctx, url0, options) {
|
|
|
82
83
|
}
|
|
83
84
|
return { ingested, pages, maxUpdatedAt, drained: true };
|
|
84
85
|
}
|
|
85
|
-
// A reset hours away must fail the run for a later rerun; sleeping
|
|
86
|
+
// A reset hours away must fail the run for a later rerun; sleeping
|
|
87
|
+
// through it would hold the process for the whole window.
|
|
86
88
|
const MAX_RATE_LIMIT_ATTEMPTS = 5;
|
|
87
|
-
const MAX_RATE_LIMIT_WAIT_MS = 10 *
|
|
89
|
+
const MAX_RATE_LIMIT_WAIT_MS = 10 * MINUTE_MS;
|
|
88
90
|
async function fetchPagePastRateLimit(options, url) {
|
|
89
91
|
const { fetcher, token, sleep } = options;
|
|
90
92
|
let waitedMs = 0;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import type { ConnectorContext } from '../store.js';
|
|
2
2
|
export interface DeletionInput {
|
|
3
3
|
/** artifact_ref of the comment, e.g. 'github://acme/repo/issue/42/comment/123'
|
|
4
4
|
* or 'github://acme/repo/pull/7/review_comment/456'. */
|
|
@@ -15,7 +15,9 @@ export interface DeletionResult {
|
|
|
15
15
|
status: DeletionStatus;
|
|
16
16
|
archivedCount: number;
|
|
17
17
|
}
|
|
18
|
-
/** Handle `issue_comment.deleted` and `pull_request_review_comment.deleted`:
|
|
19
|
-
*
|
|
20
|
-
|
|
18
|
+
/** Handle `issue_comment.deleted` and `pull_request_review_comment.deleted`:
|
|
19
|
+
* archive ALL active raw rows for the artifact_ref in one write. Tenant and
|
|
20
|
+
* kind='raw' filtering are load-bearing: without them a deletion could
|
|
21
|
+
* archive another tenant's row or a distilled row. */
|
|
22
|
+
export declare function handleCommentDeleted(ctx: ConnectorContext, input: DeletionInput): Promise<DeletionResult>;
|
|
21
23
|
//# sourceMappingURL=deletion.d.ts.map
|
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
*
|
|
1
|
+
/** Handle `issue_comment.deleted` and `pull_request_review_comment.deleted`:
|
|
2
|
+
* archive ALL active raw rows for the artifact_ref in one write. Tenant and
|
|
3
|
+
* kind='raw' filtering are load-bearing: without them a deletion could
|
|
4
|
+
* archive another tenant's row or a distilled row. */
|
|
4
5
|
export async function handleCommentDeleted(ctx, input) {
|
|
5
6
|
const { artifactRef, idempotencyKey, deliveryId, eventName } = input;
|
|
6
|
-
const done = await
|
|
7
|
+
const done = await ctx.store.connectorEvents.archiveDeletedArtifact({
|
|
7
8
|
tenantId: ctx.tenantId,
|
|
8
9
|
actor: ctx.actor.subject,
|
|
9
10
|
artifactRef,
|
|
@@ -1,21 +1,23 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { ConnectorContext } from '../store.js';
|
|
2
2
|
import { type DlqBucket, type DlqItem, type GitHubDlqInsert } from '../../store/connectors/github.js';
|
|
3
3
|
import { type ConnectorDlq, type ReplayResult } from '../dlq.js';
|
|
4
4
|
export type { DlqBucket, DlqItem };
|
|
5
5
|
type GitHubOwnColumns = Pick<GitHubDlqInsert, 'eventName' | 'deliveryId' | 'installationId' | 'repoFullName'>;
|
|
6
|
-
/** GitHub's dead-letter table; the event, delivery, installation and repo columns let an operator triage a row
|
|
6
|
+
/** GitHub's dead-letter table; the event, delivery, installation and repo columns let an operator triage a row
|
|
7
|
+
* without re-reading the payload. */
|
|
7
8
|
export declare const githubDlq: ConnectorDlq<GitHubOwnColumns, DlqBucket, DlqItem>;
|
|
8
9
|
export interface ReplayDlqOpts {
|
|
9
10
|
/** Current webhook secret. If omitted, signature check is skipped (force-only path). */
|
|
10
11
|
webhookSecret?: string;
|
|
11
|
-
/** Previous webhook secret during rotation, passed to verifyGitHubSignature.previousSecret so old-secret DLQ rows
|
|
12
|
+
/** Previous webhook secret during rotation, passed to verifyGitHubSignature.previousSecret so old-secret DLQ rows
|
|
13
|
+
* need no --force. */
|
|
12
14
|
previousSecret?: string;
|
|
13
15
|
/** When true, skip signature verification (used for legacy entries after secret rotation). */
|
|
14
16
|
force?: boolean;
|
|
15
17
|
}
|
|
16
18
|
/** Hook the webhook route injects to re-ingest a row, which keeps this module free of every event-type handler.
|
|
17
19
|
* No `idempotencyKey` field: ingest re-derives it from the parsed event, and a passed-in key could be stale. */
|
|
18
|
-
export type IngestHook = (ctx:
|
|
20
|
+
export type IngestHook = (ctx: ConnectorContext, args: {
|
|
19
21
|
rawPayload: string;
|
|
20
22
|
eventName: string;
|
|
21
23
|
deliveryId: string;
|
|
@@ -23,8 +25,8 @@ export type IngestHook = (ctx: Context, args: {
|
|
|
23
25
|
memoryId: string | null;
|
|
24
26
|
}>;
|
|
25
27
|
/** Replay a DLQ row through the normal ingest path; a failed signature, parse or envelope check bumps retry_count.
|
|
26
|
-
*
|
|
27
|
-
export declare function replayDlqEntry(ctx:
|
|
28
|
+
* No `ingestHook` (dry-run): bumps retry_count, returns `replayed` with memoryId=null. Replays use today's routing. */
|
|
29
|
+
export declare function replayDlqEntry(ctx: ConnectorContext, id: number, opts?: ReplayDlqOpts & {
|
|
28
30
|
ingestHook?: IngestHook;
|
|
29
31
|
}): Promise<ReplayResult>;
|
|
30
32
|
//# sourceMappingURL=dlq.d.ts.map
|
|
@@ -2,7 +2,8 @@ import { githubDlqEntry, markGitHubDlqRetried, listGitHubDlq, } from '../../stor
|
|
|
2
2
|
import { replayParked } from '../dlq.js';
|
|
3
3
|
import { verifyGitHubSignature } from './signature.js';
|
|
4
4
|
import { isGitHubWebhookEnvelope } from './types.js';
|
|
5
|
-
/** GitHub's dead-letter table; the event, delivery, installation and repo columns let an operator triage a row
|
|
5
|
+
/** GitHub's dead-letter table; the event, delivery, installation and repo columns let an operator triage a row
|
|
6
|
+
* without re-reading the payload. */
|
|
6
7
|
export const githubDlq = {
|
|
7
8
|
letter: (row) => ({ connector: 'github', ...row }),
|
|
8
9
|
list: listGitHubDlq,
|
|
@@ -10,7 +11,7 @@ export const githubDlq = {
|
|
|
10
11
|
bump: markGitHubDlqRetried,
|
|
11
12
|
};
|
|
12
13
|
/** Replay a DLQ row through the normal ingest path; a failed signature, parse or envelope check bumps retry_count.
|
|
13
|
-
*
|
|
14
|
+
* No `ingestHook` (dry-run): bumps retry_count, returns `replayed` with memoryId=null. Replays use today's routing. */
|
|
14
15
|
export async function replayDlqEntry(ctx, id, opts = {}) {
|
|
15
16
|
const { webhookSecret, previousSecret, ingestHook } = opts;
|
|
16
17
|
return replayParked({
|
|
@@ -20,8 +21,9 @@ export async function replayDlqEntry(ctx, id, opts = {}) {
|
|
|
20
21
|
isEnvelope: isGitHubWebhookEnvelope,
|
|
21
22
|
notEnvelope: 'not a GitHub webhook envelope',
|
|
22
23
|
reingest: async (row) => {
|
|
23
|
-
if (!ingestHook)
|
|
24
|
+
if (!ingestHook) {
|
|
24
25
|
return { ok: true, status: 'replayed', memoryId: null, reason: 'dry-run: no ingest hook supplied' };
|
|
26
|
+
}
|
|
25
27
|
// The hook owns routing, idempotency and the memory write, and re-derives the key from the parsed event.
|
|
26
28
|
const { memoryId } = await ingestHook(ctx, {
|
|
27
29
|
rawPayload: row.rawPayload,
|
|
@@ -34,10 +36,14 @@ export async function replayDlqEntry(ctx, id, opts = {}) {
|
|
|
34
36
|
}
|
|
35
37
|
function refuseSignature(row, webhookSecret, previousSecret) {
|
|
36
38
|
if (!row.signature) {
|
|
37
|
-
return {
|
|
39
|
+
return {
|
|
40
|
+
status: 'sig_missing',
|
|
41
|
+
reason: 'row has no signature (legacy, or redacted before storing); pass --force to replay',
|
|
42
|
+
};
|
|
38
43
|
}
|
|
39
|
-
if (verifyGitHubSignature({ rawBody: row.rawPayload, signature: row.signature, webhookSecret, previousSecret }))
|
|
44
|
+
if (verifyGitHubSignature({ rawBody: row.rawPayload, signature: row.signature, webhookSecret, previousSecret })) {
|
|
40
45
|
return null;
|
|
46
|
+
}
|
|
41
47
|
return {
|
|
42
48
|
status: 'sig_fail',
|
|
43
49
|
reason: 'signature did not verify against current GITHUB_WEBHOOK_SECRET; pass --force to replay anyway',
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { ConnectorContext } from '../store.js';
|
|
2
2
|
import { type IngestResult } from '../ingest.js';
|
|
3
3
|
import type { GitHubIssueEvent, GitHubIssueCommentEvent, GitHubPullRequestEvent, GitHubPullRequestReviewCommentEvent } from './types.js';
|
|
4
4
|
/** Discriminated union of the four event shapes V1 ingests; eventName MUST equal the X-GitHub-Event header,
|
|
@@ -24,5 +24,5 @@ export interface IngestInput {
|
|
|
24
24
|
/** X-GitHub-Delivery header value, audit metadata only. */
|
|
25
25
|
deliveryId: string;
|
|
26
26
|
}
|
|
27
|
-
export declare function ingestEvent(ctx:
|
|
27
|
+
export declare function ingestEvent(ctx: ConnectorContext, input: IngestInput): Promise<IngestResult>;
|
|
28
28
|
//# sourceMappingURL=ingest.d.ts.map
|
|
@@ -1,7 +1,6 @@
|
|
|
1
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
|
|
3
|
-
// the store logs the key in the memory's own transaction, which is what holds when two workers race.
|
|
4
|
-
import { requireGroup, storeFor } from '../../store/index.js';
|
|
2
|
+
// X-GitHub-Delivery header, so a replay cannot get past it by rotating the delivery id. The pre-check is only the fast
|
|
3
|
+
// path: the store logs the key in the memory's own transaction, which is what holds when two workers race.
|
|
5
4
|
import { rememberWithEventLog } from '../ingest.js';
|
|
6
5
|
import { computeIdempotencyKey } from './signature.js';
|
|
7
6
|
import { issueEventToRememberOpts, issueCommentEventToRememberOpts, pullRequestEventToRememberOpts, prReviewCommentEventToRememberOpts, } from './transform.js';
|
|
@@ -45,9 +44,14 @@ function eventUpdatedAt(event) {
|
|
|
45
44
|
}
|
|
46
45
|
}
|
|
47
46
|
export async function ingestEvent(ctx, input) {
|
|
48
|
-
const events =
|
|
47
|
+
const events = ctx.store.connectorEvents;
|
|
49
48
|
const idempotencyKey = computeIdempotencyKey(eventArtifactRef(input.event), eventUpdatedAt(input.event));
|
|
50
|
-
const event = {
|
|
49
|
+
const event = {
|
|
50
|
+
connector: 'github',
|
|
51
|
+
idempotencyKey,
|
|
52
|
+
deliveryId: input.deliveryId,
|
|
53
|
+
eventName: input.event.eventName,
|
|
54
|
+
};
|
|
51
55
|
// Fast path: pre-check. Avoids running the transform / opening a write tx
|
|
52
56
|
// for the common already-seen case (GitHub auto-retries with the same body).
|
|
53
57
|
const seen = await events.eventRecord(event);
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
/** Octokit-shaped HTTP fetcher for the GitHub backfill; tests inject a fake `GitHubFetcher`.
|
|
2
|
-
*
|
|
2
|
+
* Any non-200 that is not a recognised rate-limit pause MUST throw `GitHubFetchError`, since an empty page would be a
|
|
3
|
+
* silent empty backfill.
|
|
4
|
+
*/
|
|
3
5
|
import { type RateLimitInfo } from './ratelimit.js';
|
|
4
6
|
import type { JsonValue } from '../../util/json.js';
|
|
5
7
|
export declare class GitHubFetchError extends Error {
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
/** Octokit-shaped HTTP fetcher for the GitHub backfill; tests inject a fake `GitHubFetcher`.
|
|
2
|
-
*
|
|
2
|
+
* Any non-200 that is not a recognised rate-limit pause MUST throw `GitHubFetchError`, since an empty page would be a
|
|
3
|
+
* silent empty backfill.
|
|
4
|
+
*/
|
|
3
5
|
import { parseRateLimit } from './ratelimit.js';
|
|
4
6
|
import { fetchWithRetry } from '../../util/http-retry.js';
|
|
5
7
|
import { readCappedJson, readCappedText } from '../../util/capped-json.js';
|
|
@@ -36,7 +38,10 @@ const ERROR_BODY_SNIPPET_CHARS = 256;
|
|
|
36
38
|
const UTF8_MAX_BYTES_PER_CHAR = 4;
|
|
37
39
|
// A page is at most 100 items (per_page=100), each with a body of up to 65,536 characters at 4 bytes, plus its fields.
|
|
38
40
|
const GITHUB_MAX_REPLY_BYTES = 32 * 1024 * 1024;
|
|
39
|
-
/**
|
|
41
|
+
/**
|
|
42
|
+
* The items of a 200 list reply. A body that is not JSON, is over the cap or is not an array throws, so it never
|
|
43
|
+
* reaches ingest as items.
|
|
44
|
+
*/
|
|
40
45
|
async function readItems(res, url) {
|
|
41
46
|
// The path only: a `next` link comes from the server, so its query string is not ours to print.
|
|
42
47
|
const path = new URL(url).pathname;
|
|
@@ -1,9 +1,13 @@
|
|
|
1
|
-
/**
|
|
1
|
+
/**
|
|
2
|
+
* GitHub rate-limit header parser: 403 with `X-RateLimit-Remaining: 0` is primary, 429 with `Retry-After` is secondary.
|
|
2
3
|
* Backfill must pause and resume rather than error. */
|
|
3
4
|
export interface RateLimitInfo {
|
|
4
5
|
readonly sleepSeconds: number;
|
|
5
6
|
readonly reason: 'primary' | 'secondary' | 'none';
|
|
6
7
|
}
|
|
7
|
-
/**
|
|
8
|
+
/**
|
|
9
|
+
* Parse the rate-limit signal from a GitHub response; `headers` are lower-cased and `now` (epoch seconds) is for
|
|
10
|
+
* deterministic tests.
|
|
11
|
+
*/
|
|
8
12
|
export declare function parseRateLimit(headers: Record<string, string | undefined>, status: number, now?: number): RateLimitInfo;
|
|
9
13
|
//# sourceMappingURL=ratelimit.d.ts.map
|
|
@@ -1,6 +1,10 @@
|
|
|
1
|
-
/**
|
|
1
|
+
/**
|
|
2
|
+
* GitHub rate-limit header parser: 403 with `X-RateLimit-Remaining: 0` is primary, 429 with `Retry-After` is secondary.
|
|
2
3
|
* Backfill must pause and resume rather than error. */
|
|
3
|
-
/**
|
|
4
|
+
/**
|
|
5
|
+
* Parse the rate-limit signal from a GitHub response; `headers` are lower-cased and `now` (epoch seconds) is for
|
|
6
|
+
* deterministic tests.
|
|
7
|
+
*/
|
|
4
8
|
export function parseRateLimit(headers, status, now) {
|
|
5
9
|
const _now = now ?? Math.floor(Date.now() / 1000);
|
|
6
10
|
if (status === 429) {
|
|
@@ -6,11 +6,22 @@ export interface VerifyOpts {
|
|
|
6
6
|
/** Previous secret for rotation parity with Slack. Optional. */
|
|
7
7
|
previousSecret?: string;
|
|
8
8
|
}
|
|
9
|
+
/**
|
|
10
|
+
* True for a header that could be a GitHub signature; anything else is refused before the body is read, since no secret
|
|
11
|
+
* can make it match.
|
|
12
|
+
*/
|
|
13
|
+
export declare function isWellFormedGitHubSignature(signature: string): boolean;
|
|
9
14
|
export declare function verifyGitHubSignature(opts: VerifyOpts): boolean;
|
|
10
|
-
/**
|
|
11
|
-
*
|
|
15
|
+
/**
|
|
16
|
+
* Source-aware idempotency key: artifact_ref plus the source-side updated_at, so a webhook and a REST backfill of the
|
|
17
|
+
* SAME event dedupe.
|
|
18
|
+
* An edit gets a new key (a new revision); both inputs come from the parsed event, not the unsigned delivery header, so
|
|
19
|
+
* replays cannot bypass dedupe.
|
|
20
|
+
*/
|
|
12
21
|
export declare function computeIdempotencyKey(artifactRef: string, updatedAt: string | null | undefined): string;
|
|
13
22
|
/** Deletion idempotency key: sha256('deleted:' + artifactRef + ':' + updatedAt).
|
|
14
|
-
*
|
|
23
|
+
* A separate namespace so an ingest's event-log row cannot make a deletion return 'duplicate'; retries of the same
|
|
24
|
+
* deletion still dedupe.
|
|
25
|
+
*/
|
|
15
26
|
export declare function computeDeletionKey(artifactRef: string, updatedAt: string | null | undefined): string;
|
|
16
27
|
//# sourceMappingURL=signature.d.ts.map
|
|
@@ -1,4 +1,12 @@
|
|
|
1
1
|
import { createHmac, createHash, timingSafeEqual } from 'crypto';
|
|
2
|
+
const SIGNATURE_HEADER_RE = /^sha256=[0-9a-f]{64}$/;
|
|
3
|
+
/**
|
|
4
|
+
* True for a header that could be a GitHub signature; anything else is refused before the body is read, since no secret
|
|
5
|
+
* can make it match.
|
|
6
|
+
*/
|
|
7
|
+
export function isWellFormedGitHubSignature(signature) {
|
|
8
|
+
return SIGNATURE_HEADER_RE.test(signature);
|
|
9
|
+
}
|
|
2
10
|
function verifyOne(rawBody, signature, secret) {
|
|
3
11
|
if (!signature.startsWith('sha256='))
|
|
4
12
|
return false;
|
|
@@ -16,13 +24,19 @@ export function verifyGitHubSignature(opts) {
|
|
|
16
24
|
return true;
|
|
17
25
|
return false;
|
|
18
26
|
}
|
|
19
|
-
/**
|
|
20
|
-
*
|
|
27
|
+
/**
|
|
28
|
+
* Source-aware idempotency key: artifact_ref plus the source-side updated_at, so a webhook and a REST backfill of the
|
|
29
|
+
* SAME event dedupe.
|
|
30
|
+
* An edit gets a new key (a new revision); both inputs come from the parsed event, not the unsigned delivery header, so
|
|
31
|
+
* replays cannot bypass dedupe.
|
|
32
|
+
*/
|
|
21
33
|
export function computeIdempotencyKey(artifactRef, updatedAt) {
|
|
22
34
|
return createHash('sha256').update(`${artifactRef}:${updatedAt ?? ''}`).digest('hex');
|
|
23
35
|
}
|
|
24
36
|
/** Deletion idempotency key: sha256('deleted:' + artifactRef + ':' + updatedAt).
|
|
25
|
-
*
|
|
37
|
+
* A separate namespace so an ingest's event-log row cannot make a deletion return 'duplicate'; retries of the same
|
|
38
|
+
* deletion still dedupe.
|
|
39
|
+
*/
|
|
26
40
|
export function computeDeletionKey(artifactRef, updatedAt) {
|
|
27
41
|
return createHash('sha256').update(`deleted:${artifactRef}:${updatedAt ?? ''}`).digest('hex');
|
|
28
42
|
}
|
|
@@ -1,11 +1,13 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import type { StoreWith } 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;
|
|
5
5
|
/** `repository.full_name` from the webhook envelope, used for PAT-mode multi-tenant routing. */
|
|
6
6
|
repoFullName?: string | null;
|
|
7
7
|
}
|
|
8
|
-
/** Resolve a GitHub envelope's tenant_id by installation id, then
|
|
9
|
-
*
|
|
10
|
-
|
|
8
|
+
/** Resolve a GitHub envelope's tenant_id by installation id, then
|
|
9
|
+
* repository.full_name; the HIPPO_TENANT fallback applies only if both tables are
|
|
10
|
+
* empty. An unknown installation or repo on a multi-tenant deployment returns
|
|
11
|
+
* null (fail closed); GITHUB_ALLOW_UNKNOWN_INSTALLATION_FALLBACK=1 escapes. */
|
|
12
|
+
export declare function resolveTenantForGitHub(store: StoreWith<'connectorEvents'>, args: ResolveArgs): Promise<string | null>;
|
|
11
13
|
//# sourceMappingURL=tenant-routing.d.ts.map
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
import { envGitHubAllowUnknownInstallationFallback, envTenant } from '../../util/env.js';
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
*
|
|
5
|
-
|
|
2
|
+
/** Resolve a GitHub envelope's tenant_id by installation id, then
|
|
3
|
+
* repository.full_name; the HIPPO_TENANT fallback applies only if both tables are
|
|
4
|
+
* empty. An unknown installation or repo on a multi-tenant deployment returns
|
|
5
|
+
* null (fail closed); GITHUB_ALLOW_UNKNOWN_INSTALLATION_FALLBACK=1 escapes. */
|
|
6
|
+
export async function resolveTenantForGitHub(store, args) {
|
|
6
7
|
const envFallback = () => envTenant();
|
|
7
8
|
const escapeHatch = envGitHubAllowUnknownInstallationFallback();
|
|
8
|
-
const routing = await
|
|
9
|
+
const routing = await store.connectorEvents.githubRouting(args);
|
|
9
10
|
if (routing.tenant)
|
|
10
11
|
return routing.tenant;
|
|
11
12
|
if (args.installationId) {
|
|
@@ -1,89 +1,72 @@
|
|
|
1
1
|
import { scopeFromRepository } from './scope.js';
|
|
2
|
-
/**
|
|
3
|
-
*
|
|
2
|
+
/**
|
|
3
|
+
* Convert GitHub webhook events into RememberOpts; each returns null when the event has no usable body so the caller
|
|
4
|
+
* marks it seen and skips the insert.
|
|
5
|
+
* artifact_ref formats (github://<owner/repo>/issue|pull/<n>[/comment|review_comment/<id>]) are stable because deletion
|
|
6
|
+
* looks rows up by them.
|
|
7
|
+
*/
|
|
4
8
|
const UNKNOWN_REPO = 'unknown/unknown';
|
|
5
|
-
|
|
6
|
-
const
|
|
7
|
-
const title = evt.issue.title?.trim();
|
|
8
|
-
const text = [title, body].filter(Boolean).join('\n\n');
|
|
9
|
-
if (!text)
|
|
10
|
-
return null;
|
|
11
|
-
const repoFull = evt.repository?.full_name ?? UNKNOWN_REPO;
|
|
12
|
-
const login = evt.issue.user.login;
|
|
9
|
+
function rememberOpts(repository, { content, refPath, event, login }) {
|
|
10
|
+
const repoFull = repository?.full_name ?? UNKNOWN_REPO;
|
|
13
11
|
return {
|
|
14
|
-
content
|
|
12
|
+
content,
|
|
15
13
|
kind: 'raw',
|
|
16
|
-
scope: scopeFromRepository(
|
|
17
|
-
artifactRef: `github://${repoFull}
|
|
14
|
+
scope: scopeFromRepository(repository),
|
|
15
|
+
artifactRef: `github://${repoFull}/${refPath}`,
|
|
18
16
|
owner: `user:github:${login}`,
|
|
19
17
|
tags: [
|
|
20
18
|
'source:github',
|
|
21
19
|
`repo:${repoFull}`,
|
|
22
|
-
`event
|
|
20
|
+
`event:${event}`,
|
|
23
21
|
`user:github:${login}`,
|
|
24
22
|
],
|
|
25
23
|
};
|
|
26
24
|
}
|
|
25
|
+
function titleAndBody(item) {
|
|
26
|
+
return [item.title?.trim(), item.body?.trim()].filter(Boolean).join('\n\n');
|
|
27
|
+
}
|
|
28
|
+
export function issueEventToRememberOpts(evt) {
|
|
29
|
+
const content = titleAndBody(evt.issue);
|
|
30
|
+
if (!content)
|
|
31
|
+
return null;
|
|
32
|
+
return rememberOpts(evt.repository, {
|
|
33
|
+
content,
|
|
34
|
+
refPath: `issue/${evt.issue.number}`,
|
|
35
|
+
event: `issues.${evt.action}`,
|
|
36
|
+
login: evt.issue.user.login,
|
|
37
|
+
});
|
|
38
|
+
}
|
|
27
39
|
export function issueCommentEventToRememberOpts(evt) {
|
|
28
|
-
const
|
|
29
|
-
if (!
|
|
40
|
+
const content = evt.comment.body?.trim();
|
|
41
|
+
if (!content)
|
|
30
42
|
return null;
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
artifactRef: `github://${repoFull}/issue/${evt.issue.number}/comment/${evt.comment.id}`,
|
|
38
|
-
owner: `user:github:${login}`,
|
|
39
|
-
tags: [
|
|
40
|
-
'source:github',
|
|
41
|
-
`repo:${repoFull}`,
|
|
42
|
-
`event:issue_comment.${evt.action}`,
|
|
43
|
-
`user:github:${login}`,
|
|
44
|
-
],
|
|
45
|
-
};
|
|
43
|
+
return rememberOpts(evt.repository, {
|
|
44
|
+
content,
|
|
45
|
+
refPath: `issue/${evt.issue.number}/comment/${evt.comment.id}`,
|
|
46
|
+
event: `issue_comment.${evt.action}`,
|
|
47
|
+
login: evt.comment.user.login,
|
|
48
|
+
});
|
|
46
49
|
}
|
|
47
50
|
export function pullRequestEventToRememberOpts(evt) {
|
|
48
|
-
const
|
|
49
|
-
|
|
50
|
-
const text = [title, body].filter(Boolean).join('\n\n');
|
|
51
|
-
if (!text)
|
|
51
|
+
const content = titleAndBody(evt.pull_request);
|
|
52
|
+
if (!content)
|
|
52
53
|
return null;
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
artifactRef: `github://${repoFull}/pull/${evt.pull_request.number}`,
|
|
60
|
-
owner: `user:github:${login}`,
|
|
61
|
-
tags: [
|
|
62
|
-
'source:github',
|
|
63
|
-
`repo:${repoFull}`,
|
|
64
|
-
`event:pull_request.${evt.action}`,
|
|
65
|
-
`user:github:${login}`,
|
|
66
|
-
],
|
|
67
|
-
};
|
|
54
|
+
return rememberOpts(evt.repository, {
|
|
55
|
+
content,
|
|
56
|
+
refPath: `pull/${evt.pull_request.number}`,
|
|
57
|
+
event: `pull_request.${evt.action}`,
|
|
58
|
+
login: evt.pull_request.user.login,
|
|
59
|
+
});
|
|
68
60
|
}
|
|
69
61
|
export function prReviewCommentEventToRememberOpts(evt) {
|
|
70
|
-
const
|
|
71
|
-
if (!
|
|
62
|
+
const content = evt.comment.body?.trim();
|
|
63
|
+
if (!content)
|
|
72
64
|
return null;
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
artifactRef: `github://${repoFull}/pull/${evt.pull_request.number}/review_comment/${evt.comment.id}`,
|
|
80
|
-
owner: `user:github:${login}`,
|
|
81
|
-
tags: [
|
|
82
|
-
'source:github',
|
|
83
|
-
`repo:${repoFull}`,
|
|
84
|
-
`event:pull_request_review_comment.${evt.action}`,
|
|
85
|
-
`user:github:${login}`,
|
|
86
|
-
],
|
|
87
|
-
};
|
|
65
|
+
return rememberOpts(evt.repository, {
|
|
66
|
+
content,
|
|
67
|
+
refPath: `pull/${evt.pull_request.number}/review_comment/${evt.comment.id}`,
|
|
68
|
+
event: `pull_request_review_comment.${evt.action}`,
|
|
69
|
+
login: evt.comment.user.login,
|
|
70
|
+
});
|
|
88
71
|
}
|
|
89
72
|
//# sourceMappingURL=transform.js.map
|
|
@@ -1,7 +1,14 @@
|
|
|
1
|
-
/**
|
|
2
|
-
*
|
|
1
|
+
/**
|
|
2
|
+
* GitHub webhook event shapes for the ingestion connector
|
|
3
|
+
* (https://docs.github.com/en/webhooks/webhook-events-and-payloads).
|
|
4
|
+
* Each guard is gated on the X-GitHub-Event header so a misrouted payload cannot satisfy a guard for the wrong event
|
|
5
|
+
* type.
|
|
6
|
+
*/
|
|
3
7
|
import { type JsonValue } from '../../util/json.js';
|
|
4
|
-
/**
|
|
8
|
+
/**
|
|
9
|
+
* `private` MUST stay optional: scope.ts maps `private: undefined` to private, and a strict boolean would reject the
|
|
10
|
+
* payload before scope can fail closed.
|
|
11
|
+
*/
|
|
5
12
|
export interface GitHubRepository {
|
|
6
13
|
full_name: string;
|
|
7
14
|
private?: boolean;
|
|
@@ -1,5 +1,9 @@
|
|
|
1
|
-
/**
|
|
2
|
-
*
|
|
1
|
+
/**
|
|
2
|
+
* GitHub webhook event shapes for the ingestion connector
|
|
3
|
+
* (https://docs.github.com/en/webhooks/webhook-events-and-payloads).
|
|
4
|
+
* Each guard is gated on the X-GitHub-Event header so a misrouted payload cannot satisfy a guard for the wrong event
|
|
5
|
+
* type.
|
|
6
|
+
*/
|
|
3
7
|
import { isJsonString, isJsonNumber } from '../../util/json.js';
|
|
4
8
|
function isObjectOrArray(x) {
|
|
5
9
|
return x !== null && typeof x === 'object';
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { ConnectorStore } from '../store.js';
|
|
2
2
|
import { type WebhookRequest } from '../../util/http-util.js';
|
|
3
|
-
/** GitHub webhook receiver: HMAC SHA-256 over the raw body, event type from the X-GitHub-Event header, tenant by
|
|
4
|
-
* ACKs 200 on signed envelopes (DLQ too); 401 only on a bad signature;
|
|
5
|
-
* 404
|
|
6
|
-
export declare function handleGitHubEventsWebhook(request: WebhookRequest, store
|
|
3
|
+
/** GitHub webhook receiver: HMAC SHA-256 over the raw body, event type from the X-GitHub-Event header, tenant by
|
|
4
|
+
* installation.id then repository.full_name. ACKs 200 on signed envelopes (DLQ too); 401 only on a bad signature;
|
|
5
|
+
* 409 on a replayed delivery id; 404 if GITHUB_WEBHOOK_SECRET is unset. No Bearer: route auth is webhook-signature. */
|
|
6
|
+
export declare function handleGitHubEventsWebhook(request: WebhookRequest, store: ConnectorStore): Promise<void>;
|
|
7
7
|
//# sourceMappingURL=webhook.d.ts.map
|